2013-11-27 120 views
0

我在重新填充updatepanel內的dropdownlist時遇到了一些麻煩。在頁面加載,我打開下拉列表:在UpdatePanel中重新填充Asp.Net DropDownList

  this.dropdownFacility.Items.Clear(); 
      this.dropdownFacility.DataSource = table; 
      this.dropdownFacility.DataTextField = "FacilityName"; 
      this.dropdownFacility.DataValueField = "FacilityID"; 
      this.dropdownFacility.DataBind(); 

變量「表」是我從一個SQL數據庫填充的DataTable。這工作,並顯示頁面加載第一次後,我的所有值。然後,我的網頁裏面,我有一個JQuery的對話框顯示:

 <div id="assignmentDialog" title="Process Assignment"> 
      <div style="margin:10px; font-size:16px; "> 
       <asp:Label runat="server" Text="Select A Facility:*" Font-Bold="true" style="width:140px; display:inline-block; vertical-align:text-top; text-align:right;" /> 
       <asp:DropDownList runat="server" ID="dropdownFacility" /> 
       <asp:LinkButton runat="server" ID="linkNewFacility" Text="New" ForeColor="Blue" OnClientClick="OpenFacilityDialog();" /> 
      </div> 
     </div> 

一旦點擊鏈接按鈕,另一個JQuery的對話框顯示允許用戶對設備輸入數據。當他們完成後,他們可以點擊一個按鈕提交數據:

<asp:Button runat="server" ID="NewFacility" Text="Submit" OnClick="NewFacility_Clicked" OnClientClick="return CheckFacilityData();" style="display: block; text-align:center; margin: 0 auto;" /> 

這是問題發生的地方。點擊按鈕後,我可以看到記錄已經插入到表格中。此外,在頁面加載過程中,在我的代碼中出現斷點時,我可以看到,在重新綁定下拉菜單後,項目數量增加了1,表明新記錄存在。但是,在實際頁面上,該新記錄不會顯示在下拉列表中。以下是我如何使用觸發器定義我的更新面板:

<asp:UpdatePanel runat="server" ID="assignmentUpdatePanel" UpdateMode="Conditional" ChildrenAsTriggers="true"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="NewFacility" EventName="Click" /> 
    </Triggers> 
... 

任何人都可以看到我在做什麼錯?

+0

我們可以看到代碼爲您的NewFacility點擊事件處理程序? – Lopsided

+0

偶處理程序中的代碼只是將記錄提交給數據庫,並且工作正常。 –

+0

經過更多測試後,我發現刪除JQuery對話框調用div,修復了重新填充下拉的問題。但是,我仍然想使用對話邏輯。有沒有解決這個問題的方法? –

回答

0

好吧,我想通了這個問題。問題實際上是由於我在ASP.NET UpdatePanel中使用JQuery對話框。 JQuery邏輯實際上爲對話框創建了一個新的div,並將它放在form元素之外。爲了解決這個問題,我基本做了2件事。首先是通過這樣追加對話框回形式:

$("#assignmentDialog").dialog(
{ 
    modal: true, 
    hide: "explode", 
    width: 450, 
    autoOpen: false, 
    resizable: false, 
    open: function (event, ui) 
    { 
     $(this).parent().appendTo("form"); 
    }, 
    close: function (event, ui) 
    { 
     // Clear the inputs 
     $("#textboxStartDate").val(""); 
     $("#textboxEndDate").val(""); 
     $("#dropdownFacility").val(""); 
    } 
}); 

然後,我不得不這樣做是爲了將我的更新面板的對話框內:

<div id="assignmentDialog" title="Process Assignment"> 
     <asp:UpdatePanel runat="server" ID="assignmentUpdatePanel" UpdateMode="Conditional" ChildrenAsTriggers="true"> 
1

嘗試這樣的:

<asp:DropDownList runat="server" ID="dropdownFacility" 
       AppendDataBoundItems="True" AutoPostBack="True" /> 

或:

this.dropdownFacility.Items.Clear(); 
this.dropdownFacility.DataSource = table; 
this.dropdownFacility.DataTextField = "FacilityName"; 
this.dropdownFacility.DataValueField = "FacilityID"; 
this.dropdownFacility.AppendDataBoundItems = true; 
this.dropdownFacility.AutoPostBack = true; 
this.dropdownFacility.DataBind();