禁用的文本框将丢失视图状态

本文关键字:视图状态 文本 | 更新日期: 2023-09-27 17:58:51

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

当我在用户输入值后单击表单上的"保存"按钮时,除了禁用的文本框外,整个表单都将保持在视图状态。当我启用文本框时,一切都很好。请注意,我正在动态生成表单,并使用javascript计算(添加所有十进制字段)更新总文本框的值。

附言:为了坚持这种观点,我做的一切都很好。

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

禁用的文本框将丢失视图状态

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

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

当我使用txtBox.Enabled=false时,它没有持久化视图状态,而是在代码隐藏页中使用以上两条语句来实现

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

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

在页面上添加javascript:

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

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

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

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

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

在自定义文本框中继承文本框,并将此文本框添加到动态表单中。