ASP.NET AJAX Toolkit - CalendarExtender is reset o

2019-06-16 01:09发布

I have an ASP.NET page that has two input elements:

  1. A TextBox that is ReadOnly. This TextBox is the TargetControl of a CalendarExtender
  2. A DropDownList with AutoPostBack=true

Here is the code:

<table border="0" cellpadding="0" cellspacing="0">
  <tr><td colspan="2">Date:</td></tr>
  <tr><td colspan="2">
    <asp:TextBox ID="dateTextBox" runat="server" ReadOnly="true" />
    <ajax:CalendarExtender ID="datePicker" runat="server" Format="MM/dd/yyyy" OnLoad="datePicker_Load" TargetControlID="dateTextBox" />
  </td></tr>

  <tr><td colspan="2">Select an Option:</td></tr>
  <tr>
    <td>Name:&nbsp;</td>
    <td><asp:DropDownList ID="optionsDropDownList" runat="server" AutoPostBack="true"  
      OnLoad="optionsDropDownList_Load" 
      OnSelectedIndexChanged="optionsDropDownList_SelectedIndexChanged" 
      DataTextField="Name" DataValueField="ID" />
  </td></tr>

  <tr><td><asp:Button ID="saveButton" runat="server" Text="Save" OnClick="saveButton_Click" /></td></tr>
</table>

When the DropDownList posts back, the date selected by the user with the datePicker is reset to the current date. In addition, if I look at the Text property of dateTextBox, it is equal to string.Empty.

How do I preserve the date that the user selected on a PostBack?

9条回答
叛逆
2楼-- · 2019-06-16 01:26

It is not a problem of Preserving,after setting readonly = true the value of the particular textbox doesn't be returned back to server so

Use contentEditable="false" and made readonly = false

that would prevent value is being entered other than Calendar Extender selection also returns the value of the Text box back to the server

查看更多
Luminary・发光体
3楼-- · 2019-06-16 01:29

The fact that the text box is read only appears to be causing this problem. I duplicated your problem using no code in any of the bound events, and the date still disappeared. However, when I changed the text box to ReadOnly=False, it worked fine. Do you need to have the textbox be read only, or can you disable it or validate the date being entered?

EDIT: OK, I have an answer for you. According to this forum question, read only controls are not posted back to the server. So, when you do a postback you will lose the value in a read only control. You will need to not make the control read only.

查看更多
混吃等死
4楼-- · 2019-06-16 01:29

The solution to the issue is making use of Request.Form collections. As this collection has values of all fields that are posted back to the server and also it has the values that are set using client side scripts like JavaScript.

Thus we need to do a small change in the way we are fetching the value server side.

C#

protected void Submit(object sender, EventArgs e)
{
   string date = Request.Form[txtDate.UniqueID];
}
查看更多
聊天终结者
5楼-- · 2019-06-16 01:31

In stead of setting ReadOnly="False", set Enabled="False". This should fix your issue.

查看更多
成全新的幸福
6楼-- · 2019-06-16 01:36

If you want the textbox contents remembered after the postback and still keep it as readonly control, then you have to remove the readonly attribute from the markup, and add this in the codebehind pageload:

protected void Page_Load(object sender, EventArgs e){
    TextBox1.Attributes.Add("readonly", "readonly");
    // ...
}
查看更多
我想做一个坏孩纸
7楼-- · 2019-06-16 01:42

@taeda's answer worked for me. FYI, if someone uses enabled = "false" instead of readonly = "true" wont be able to use that answer, because Request[TxtDate.UniqueId] will throw a null exception.

查看更多
登录 后发表回答