【问题标题】:ASP.Net - How do I add a HiddenField from another WebControl and maintain it?ASP.Net - 如何从另一个 WebControl 添加一个 HiddenField 并对其进行维护?
【发布时间】:2010-12-01 02:43:24
【问题描述】:

我有一个 WebControl,我想从中动态添加一个 HiddenField。

我尝试了以下示例:Click here,但这不起作用,因为 this.Page.Form 在 Page Init 事件中为空。

我尝试了以下方法,但该值从未保持:

HiddenField hd_IsDirty = new HiddenField();

protected override void OnInit(EventArgs e)
{

    this.Controls.Add(hd_IsDirty);
    hd_IsDirty.ID = "hd_IsDirty";

    base.OnInit(e);

}

【问题讨论】:

    标签: c# asp.net viewstate hiddenfield


    【解决方案1】:

    以下作品:

    每次都创建控件(看起来很糟糕!):

    HiddenField hd_IsDirty = new HiddenField();
    

    告诉页面该控件需要一个 ControlState OnInit:

        this.Page.RegisterRequiresControlState(this);
    

    重写 ControlState 方法:

    protected override object SaveControlState()
    {
    
        object obj = base.SaveControlState();
    
        if (!string.IsNullOrEmpty(hd_IsDirty.Value))
        {
            if (obj != null)
            {
                return new Pair(obj, hd_IsDirty.Value);
            }
            else
            {
                return hd_IsDirty.Value;
            }
        }
        else
        {
            return obj;
        }
    }
    
    protected override void LoadControlState(object state)
    {
        if (state != null)
        {
            Pair p = state as Pair;
            if (p != null)
            {
                base.LoadControlState(p.First);
                hd_IsDirty.Value = (string)p.Second;
            }
            else
            {
                if (state is string)
                {
                    hd_IsDirty.Value = (string)state;
                }
                else
                {
                    base.LoadControlState(state);
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        在此question 上查看此answer

        答案将向您展示如何动态添加控件,这就是您正在尝试做的事情。

        【讨论】:

        • 有没有“神奇”的方法可以在不使用任何 aspx 标记的情况下添加控件并忘记它?我不喜欢使用 ViewState 的想法,因为它可以打开和关闭。
        • 不在 ASP.NET 中它不像 windows,它不保持它的状态。
        • 我知道。我希望有一个我不知道的更好的方法。我将使用我的答案,因为它不能像 ViewState 那样被禁用。
        猜你喜欢
        • 2012-08-05
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 2013-04-09
        • 2012-01-29
        • 1970-01-01
        • 2022-11-26
        • 1970-01-01
        相关资源
        最近更新 更多