2011-06-11 26 views
4

我正在根据所选下拉动态生成表单。 表单由字段组成(十进制值的数据条目+少量文本字段)。必须在最后添加所有小数值,并使用该值更新总文本框。总文本框被禁用。已禁用文本框损失viewstate

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

P.S.我正在为保持视图状态而做一切正确的事情。

那么是什么启用/禁用得到了轴承上的视图状态

回答

7

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

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

当我用txtBox.Enabled =假,也没有坚持视图状态,但使用或者在上面我的代码隐藏页两种说法做了

+1

关于我发布一段时间的问题上多一点问题:http://stackoverflow.com/questions/1060518/strange-behavior-using-html-readonly-readonly-vs-javascript-element-readonl/1063609# 1063609 – 2011-06-11 17:38:41

+0

@DotNetInfo,但是如果“txtBox”控件不能被intellisense访问,那么它会深入到DetailsView或GridView中。不幸的是FindControl(“txtBox”)总是在page_load中返回null。 – Fandango68 2015-06-02 02:29:41

0

添加JavaScript的网页上:

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

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

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

如果你使用的UpdatePanel然后利用ScriptManager.RegisterOnSubmitStatement方法

+0

我已经尝试过,但它没有工作。基本上,文本框显示为禁用状态,但该值不会在回发时设置。文本框不显示任何值。我用(“只读”,“只读”)属性,它工作正常,但不显示文本框处于禁用状态(灰色) – DotNetInfo 2011-06-11 14:27:17

+0

@DotNetInfo你必须删除硬编码Enabled =“false”或ReadOnly =“true “从文本框控件开始。 – Fandango68 2015-06-02 02:28:13

2

是的,禁用的表单元素将不会发送它的价值到服务器端,你可以看看请求头。禁用元素不会出现在“get”或“post”集合中。

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