使用CalendarExtender后无法获得TextBox.Text的值

 最近在看一些.NET Ajax的东西,发现一个小问题,就是当我在将TextBox的ReadOnly属性设置为true的时候,使用CalendarExtender后无法获得TextBox.Text的值。

在选择日期的时候,不允许用户修改TextBox里的值,这是比较常见的一种做法,目的是不希望再对用户的输入做进一步的格式验证。请看下面的代码:

<asp:TextBox ID="txtDayOfBirth" ReadOnly="True" runat="server" Width="100px"></asp:TextBox>   
<asp:ImageButton ID="datePickerImg" runat="server" ImageUrl="~/images/calendar.png" AlternateText="请点击本按钮以选择日期" CausesValidation="false" />   
<Ajax:CalendarExtender   ID="dayOfBirthCalendarExtender"     
          runat="server"     
          Enabled="True"     
          TargetControlID="txtDayOfBirth"     
          CssClass="MyCalendar"   
          PopupButtonID="datePickerImg"     
          Format="yyyy年MM月dd日"     
          Animated="false" />   

 在运行以后,可以通过TextBox边上的日历按钮来选择日期,但是这样做会导致读不到TextBox里文本的问题。解决办法其实很简单,就是,先不在设计中加入ReadOnly属性,而是在Page_Load中动态加入该属性。代码如下:

ASPX页面

<asp:TextBox ID="txtDayOfBirth" runat="server" Width="100px"></asp:TextBox>      
<asp:ImageButton ID="datePickerImg" runat="server" ImageUrl="~/images/calendar.png" AlternateText="请点击本按钮以选择日期" CausesValidation="false" />      
<Ajax:CalendarExtender   ID="dayOfBirthCalendarExtender"        
          runat="server"        
          Enabled="True"        
          TargetControlID="txtDayOfBirth"        
          CssClass="MyCalendar"      
          PopupButtonID="datePickerImg"        
          Format="yyyy年MM月dd日"        
          Animated="false" />     

C#后台代码

protected void Page_Load(object sender, EventArgs e)    
{    
    if (!Page.IsPostBack)    
        txtDayOfBirth.Attributes.Add("readonly", "true");    
}  

 

 

posted @ 2013-04-10 10:17  赤月奇  阅读(220)  评论(0编辑  收藏  举报