ASP.Net - 如何从另一个 WebControl 添加 HiddenField 并维护它?

发布于 2024-08-05 11:42:39 字数 479 浏览 3 评论 0 原文

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

我尝试过以下示例:单击此处 ,但这不起作用,因为 this.Page.Form 在 Page Init 事件中为 null。

我已经尝试过以下操作,但该值从未得到维护:

HiddenField hd_IsDirty = new HiddenField();

protected override void OnInit(EventArgs e)
{

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

    base.OnInit(e);

}

I've got a WebControl that I want to dynamically add a HiddenField from.

I've tried the following example: Click here, but that doesn't work due to the fact this.Page.Form is null in the Page Init event.

I've tried the following, but the value is never maintained:

HiddenField hd_IsDirty = new HiddenField();

protected override void OnInit(EventArgs e)
{

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

    base.OnInit(e);

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

丢了幸福的猪 2024-08-12 11:42:39

以下工作原理:

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

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);
            }
        }
    }
}

The following works:

Create the control every time (seems bad!):

HiddenField hd_IsDirty = new HiddenField();

Tell the Page that the control requires a ControlState OnInit:

    this.Page.RegisterRequiresControlState(this);

Override the ControlState methods:

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);
            }
        }
    }
}
汹涌人海 2024-08-12 11:42:39

请参阅此回答 a-database/1324103#1324103">问题。

答案将向您展示如何动态添加控件,这就是您想要做的。

See this answer on this question.

The answer will show you how to add a control dynamically, which is what you are trying to do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文