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");
    }
}

对于该问题,共提出以上三种解决方案,笔者建议使用第一种解决方案。

除非注明,文章均为彭智勇原创,转载请务必注明本文地址,谢谢。

本文地址:http://pengzhiyong.com/blog/4.html

posted @ 2012-12-04 12:03  吃西瓜最快  阅读(625)  评论(0编辑  收藏  举报