TextBox的ReadOnly=true时不能取值的解决方案
在开发某个系统,用TextBox作为日历输入控件时,并希望用户直接输入,而是用JS日历客户端脚本的方式来设置内容,再将其属性设置为ReadOnly=true,可问题发生了,在服务器不能通过Text属性获取在客户端设置的内容,怎么办?
估且不谈产生此问题的原因(读者可以Google答案,也可以问题解决后再找原因,效果更佳),现提供解决方案:
1、不设置TextBox的ReadOnly=true属性,通过OnFocus=this.blur()来模拟ReadOnly=true,如下:
1
|
< ASP:TEXTBOX id = txtTest onfocus = this .blur() runat = "server" ></ ASP:TEXTBOX > |
说明:在此情况下,当文本框获得焦点时便立刻失去,同时相应的客户端脚本触发,给文本框设置内容,用户就无法用键盘输入不合乎规则的内容,能够模拟ReadOnly=true效果,在服务器端能够通过Text属性正常获取通过脚本在客户端设置的值。
2、对于已设置ReadOnly=true属性后,通过Request来取值,如下前台代码:
1
|
< ASP:TEXTBOX id = txtTest runat = "server" readonly = "true" ></ ASP:TEXTBOX > |
后台代码:
1
|
string text=Request.Form[ "txtTest" ].Trim() |
3、在Page_Load()设置文本框的只读属性,这样能正常读取,如下:
1
2
3
4
5
6
7
|
protected void Page_Load(object sender,EventArgs e) { if (!Page.IsPostBack) { txtTest.Attributes.Add( "ReadOnly" , "true" ); } } |
对于该问题,共提出以上三种解决方案,笔者建议使用第一种解决方案。
除非注明,文章均为彭智勇原创,转载请务必注明本文地址,谢谢。
天行健,君子以自强不息