禁用的文本框丢失viewstate

我根据所选的下拉列表动态生成表单。 表单由字段(十进制值的数据条目+几个文本字段)组成。 必须在末尾添加所有十进制值,并使用该值更新Total TextBox。 总文本框已禁用。

当用户输入其值后,单击表单上的“保存”按钮时,除了禁用的文本框外,整个表单将保留在viewstate中。 当我启用文本框时,一切正常。 请注意,我动态生成表单并使用javascript更新总文本框的值来计算(添加所有小数字段)。

PS我正在做一切正确的持久观点。

那么启用/禁用对视图状态有什么影响

基本上,我添加了两个语句来使它工作。

txtBox.Attributes.Add("readonly", "readonly"); txtBox.Style.Add("color","gray"); 

当我使用txtBox.Enabled = false时,它没有持久化视图状态,而是在我的代码隐藏页面中使用上面两个语句替代它

是的,禁用表单元素不会将其值发送到服务器端,您可以查看请求标头。 禁用元素未出现在“获取”或“发布”集合中。

如果您想要设置用户无法编辑它,您可以将其设置为只读。

在页面上添加javascript:

 function enableTextBoxes() { $("input[type='text'][disabled='disabled']").removeAttr("disabled"); } 

并添加到服务器代码(在Page_Load,PreRender或其他方法中)

 ClientScript.RegisterOnSubmitStatement(typeof(Page), "enableTextBoxes", "enableTextBoxes();"); 

如果使用UpdatePanels,则使用ScriptManager.RegisterOnSubmitStatement方法

请创建自定义文本框,而不是使用实际的文本框实例。

inheritance自定义文本框中的文本框,并在动态表单中添加此文本框。