2009-06-05 40 views
10

重置我有了兩個輸入元素的ASP.NET頁面:ASP.NET AJAX工具包 - CalendarExtender上回發

  1. 一個文本框是隻讀的。這個文本框是一個CalendarExtender
  2. 一個DropDownList與的AutoPostBack =真TargetControl

下面是代碼:

<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> 

當DropDownList的回發,通過與日期選擇用戶選擇的日期重置爲當前日期。另外,如果我查看dateTextBox的Text屬性,它等於string.Empty。

如何保留用戶在回傳中選擇的日期?

回答

9

文本框是隻讀的事實似乎導致此問題。我使用任何綁定事件中的任何代碼複製了您的問題,並且日期仍然消失。但是,當我將文本框更改爲ReadOnly = False時,它工作正常。你需要將文本框設爲只讀,還是可以禁用它或驗證輸入的日期?

編輯:好的,我有一個答案給你。根據to this forum question,只讀控件不會回發到服務器。所以,當你做回發時,你將失去只讀控件的價值。您將不需要使控件只讀。

+3

Downvoting,因爲我相信@ taeda的答案是對這個問題的真正答案。 – 2013-01-28 22:54:00

0

我懷疑你的datePicker_Load設置的東西,而不是檢查它是否在回發。這會使它每次都發生,看起來像是「重置」。

0

代替ReadOnly =「False」,設置Enabled =「False」。這應該可以解決您的問題。

+1

無法正常工作 - 您仍然會在回發中的殘疾人字段中丟失值。 – CodeClimber 2011-10-05 13:09:39

3
protected void Page_Load(object sender, EventArgs e) 
{ 
    txt_sdate.Text = Request[txt_sdate.UniqueID]; 
} 
1

該問題的解決方案是使用Request.Form集合。由於此集合具有發佈回服務器的所有字段的值,並且它具有使用JavaScript等客戶端腳本設置的值。

因此,我們需要對獲取價值服務器端的方式做一些小的改動。

C#

protected void Submit(object sender, EventArgs e) 
{ 
    string date = Request.Form[txtDate.UniqueID]; 
} 
2

如果你想要回傳後的文本內容想起,仍然保持它作爲只讀控制,那麼你必須刪除從標記只讀屬性,並在代碼隱藏頁面加載補充一點:

protected void Page_Load(object sender, EventArgs e){ 
    TextBox1.Attributes.Add("readonly", "readonly"); 
    // ... 
} 
12

當然,你必須做的是別人已經提出:設置readonly場動態,而不是標記,回傳時確保你不會意外重置價值Page_Load() ...

...但你也必須做內部Page_Load()以下,因爲CalendarExtender對象有日期的內部副本,必須強制更改:

if (IsPostBack) // do this ONLY during postbacks 
{ 
    if (Request[txtDate.UniqueID] != null) 
    { 
     if (Request[txtDate.UniqueID].Length > 0) 
     { 
      txtDate.Text = Request[txtDate.UniqueID]; 
      txtDateExtender.SelectedDate = DateTime.Parse(Request[txtDate.UniqueID]); 
     } 
    } 
} 
+1

這是爲我工作的解決方案。我試圖讓我的文本框只讀= false和enableviewstate = true,但沒有成功。但是當我手動將日曆控件的選定日期設置爲文本框日期時,一切都很好,並且正常工作。 – 2013-01-28 22:53:17

-1

這是不保留的問題,設置readonly = true的值之後特定的文本框不被返回到服務器 所以

使用contentEditable="false"取得readonly = false

這將防止價值輸入以外的日曆擴展選擇也返回到文本框的值回到服務器

0

@ taeda的答案爲我工作。僅供參考,如果有人使用enabled = "false"而不是readonly = "true"將無法​​使用該答案,因爲Request[TxtDate.UniqueId]將拋出一個空異常。

相關問題