【问题标题】:State of checkbox lost after postback in a custom template field在自定义模板字段中回发后复选框状态丢失
【发布时间】:2012-05-15 07:23:44
【问题描述】:

我通过派生自 System.Web.UI.WebControls.TemplateField 创建了一个自定义复选框模板字段。该字段的模板是通过创建一个实现 ITemplate 接口的类来创建的。当页面上发生任何回发时,复选框中的值将丢失。

为了让这个临时工作,我使用 viewstate 将复选框的状态存储在复选框列中,但更进一步,我想完全避免这种情况,因为我将在我的应用程序中以相同的方式使用更多模板字段。

如果我遗漏了什么,请告诉我。

以下是代码:

namespace MyControls
{
    public class CheckBoxTemplateField : TemplateField
    {
        public CheckBoxTemplateField()
        {
            this.HeaderTemplate = new CheckBoxTemplate();
            this.ItemTemplate = new CheckBoxTemplate();
        }
    }

    public class CheckBoxTemplate : ITemplate
    {
        public void InstantiateIn(Control container)
        {
            CheckBox chk = new CheckBox();
            container.Controls.Add(chk);
        }
    }
}

问候, 高拉夫

【问题讨论】:

  • 我实际上刚刚发现,做你在这里所做的——从 TemplateField 派生并在构造函数中设置 ItemTemplate——是让 TemplateField 列在回发时正确保留的唯一方法。我必须查看您的其余代码才能弄清楚您为什么会丢失复选框状态,但它对我有用。

标签: asp.net checkbox viewstate templatefield itemplate


【解决方案1】:

checkbox 在回发中保持其价值的问题是众所周知的

一种解决方案是将其值存储在隐藏字段中并在服务器中读取。

附言这与 viewstate.input 控件无关,不会将它们的值保存在 viewstate 中(excpet 文本框有 'ontextchange' 事件)

【讨论】:

  • 隐藏字段或视图状态是类似的东西。我不想手动操作,因为问题不仅限于复选框,我将来必须使用不同类型的模板字段,其中可能包含下拉列表等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
相关资源
最近更新 更多