2011-12-19 106 views
0

我有一個啓用autopostback的下拉列表。並有一箇中繼器,我從數據庫填充複選框。Asp.NET dropdownlist autopostback

如果我選擇一個值複選框失去它的價值...

對此有何解決方法時,設置自動回真呢?

下面是代碼:

<asp:DropDownList ID="dropdown" runat="server" class="pop" AutoPostBack="true" > 
</asp:DropDownList> 

<asp:Repeater ID="rptD" runat="server" > 
     <ItemTemplate> 
     <td valign="top" > 
     <input type="checkbox" class="al" /> 
     </ItemTemplate> 
     </asp:Repeater> 
+1

你在哪裏填充複選框?在標記中以聲明方式回傳?更多細節請。代碼片段會有很大的幫助。 – scartag 2011-12-19 17:48:43

回答

4

我想這是因爲你被綁定的Repeater不僅if(!IsPostBack)也對回傳。因此,檢查的狀態將被覆蓋。

所以爲此在Page_Load(假定C#):

if(!IsPostBack){ 
    DataBindRepeater(); 
} 

DataBindRepeater而是設定DataSource屬性和DataBind的Repeater的方法。

您可能還想使用ASP.NET Checkbox control而不是html input type="checkbox"。僅當檢查狀態是實施IPostBackDataHandler的服務器WebControl時纔會重新加載。

+0

我認爲這是IsPostBack。 – James 2011-12-19 17:56:02

+0

@詹姆斯:是的,當然。 ;) – 2011-12-19 17:57:56

+0

我確實有!在我的加載方法回發,但仍然相同的結果。還有爲什麼重新綁定時,它還沒有保存在數據庫中呢? – James 2011-12-19 17:58:38

1

這聽起來象徵着填充Page_Load中的複選框。是這樣嗎?如果你填充在Page_Load中的控件,那麼你會希望它包裝在一個條件:

if (!IsPostBack) 
{ 
    // populate your controls from data 
} 

否則,他們會得到重新填充每次回發。如果您有自動回覆或單擊按鈕或在啓動回發的頁面上執行其他一些操作,則在事件處理程序之前調用Page_Load。因此,實際上,這種情況正在發生:

  1. 用戶導航到頁面
  2. Page_Load中清除並填充複選框
  3. 用戶在DropDownList選擇一個項目(觸發回發)
  4. Page_Load中清除並填充複選框
  5. 的DropDownList的AutoPostBack處理程序被調用

(在一個側面說明...請考慮使用一個JAX用於這種動態的客戶端 - 服務器交互。 Autopostback會導致糟糕的用戶體驗,而且正如你發現的那樣,也會給開發帶來困難。)

+0

即時消息做這個不回發.. – James 2011-12-19 18:02:13

+0

@Samim:你可以顯示更多的代碼,然後?當你通過代碼進行調試時,數據在什麼時候丟失?你有ViewState禁用的控件有問題嗎?還有其他值嗎?如果是這樣,控件之間有什麼不同? – David 2011-12-19 18:03:29

+0

請檢查以上評論 – James 2011-12-20 09:36:47

相關問題