禁用的文本框丢失viewstate

时间:2011-06-11 14:17:54

标签: c# jquery .net asp.net

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

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

P.S。我正在尽一切努力坚持观点。

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

4 个答案:

答案 0 :(得分:8)

基本上,我添加了两个语句来实现它。

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

当我使用txtBox.Enabled = false时,它没有持久存在于viewstate但是在我的代码隐藏页面中使用上面两个语句替代它

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

在页面上添加javascript:

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

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

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

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

答案 3 :(得分:0)

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

继承自定义文本框中的文本框,然后以动态形式添加此文本框。