(转)解决Asp.net中文本框控件(TextBox)readonly或disabled时内容无法POST到服

来源:互联网 发布:美发股份分配怎么算法 编辑:程序博客网 时间:2024/05/18 13:46

网页中有的时候想让用户无法在文本框控件(TextBox)里输入,常见的方法是把它的ReadOnly属性设为True,或者是将Enabled属性设为False。这两种方法的作用差不多。另外还可以用标签代替或者写脚本处理文本框获得焦点事件。后两者我们暂不讨论。

使用前两种方面会碰到一个问题,在客户端用脚本改变了文本框控件的内容,但是当网页提交时,修改后的内容不会被提交到服务器的,服务器上仍然使用前一次的内容。

为了解决问题,上google搜了一下,找到这样一篇文章,说的是二者之间的区别:
http://www.vikramlakhotia.com/ReadOnly_and_Enabled_property_of_TextBox_.aspx
但不幸的是,这里面的观点好像是错的,至少我根据他的说法做了一些试验,结果都不对。

一种已知的解决方案是,当网页提交的时候,用脚本把文本框的readOnly设置为false,disabled设置为false,提交完成后再改回来。当然,如果整个页面都被刷新掉了,那后面那个改回来的步骤就没必要了。

这种方案的局限性是,修改文本框属性这个动作必须在post动作之前。假设我们现在是想在按了一个按钮控件后,将文本框内的内容传到服务器,按钮有两个事件,一个是OnClientClick,一个是OnClick,前者在客户端执行,后者在服务器执行。经过试验,如果在OnClientClick里面修改文本框属性的话,这段脚本会执行,但是服务器拿到的还是原来的内容。这似乎意味着(但是如果在这段脚本写一个return false;OnClick事件就不会发生,这几个事件发生的顺序值得专门找个时间看一下)

后来看到了这篇文章:
http://www.velocityreviews.com/forums/t113398-server-side-controls-disabled-in-javascript.html
里面讨论的时候说,文本框控件本身有readonly和enabled属性,生成的html代码也有对应的readonly和disabled属性,如果我们修改的是后面那一套属性,那么就不会发生无法提交上去的问题。也就是说,我们可以在程序里面用类似于

  1. TextBox1.Attributes["readonly"] = "false";

这样的代码来设置,而不是直接设置TextBox的ReadOnly和Enabled属性