2013-06-04 46 views
1

我正在處理ASP.NET 4中的Web表單,並且需要根據在下拉列表中進行的選擇顯示錶中的長條目列表。我有以下的ASPX和代碼隱藏:當數據綁定時,代碼隱藏掛起中繼器控件

<form method="post" runat="server" > 
    <asp:ScriptManager runat="server" ID="mScriptManager"></asp:ScriptManager> 
    <asp:UpdatePanel ID="pnlLocalizationInfo" runat="server" > 
     <ContentTemplate> 
      <div id="selectLanguage"> 
       <p>Pick language 
        <asp:DropDownList ID="ddllanguage" runat="server" OnTextChanged="SelectLanguage" AutoPostBack="true" /> 
       </p> 
      </div> 
      <div id="languageTable"> 
     <asp:Repeater id="repTable" runat="server" OnItemDataBound="AddTableData" > 
      <HeaderTemplate> 
      Language: 
      <asp:Label ID="lbllanguageTable" runat="server" /> 
      <table> 
       <tr> 
        <th>Name</th> 
        <th>Value</th> 
       </tr> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <tr> 
        <td> 
         <asp:Label ID="lbltableNameLocalization" runat="server" /> 
         <asp:HiddenField ID="hfnameLocalization" runat="server" Value='<%#((Localization)Container.DataItem).Id %>' /> 
        </td> 
        <td> 
         <asp:TextBox ID="txttableValueLocalization" runat="server" /> 
        </td> 
       </tr> 
      </ItemTemplate> 
      <FooterTemplate> 
      </table> 
      </FooterTemplate> 
     </asp:Repeater> 
     <asp:Button ID="btnupdateLocalization" runat="server" OnClick="UpdateLocalization" Text="Save" />   
      </div>     
     </ContentTemplate> 
    </asp:UpdatePanel> 
</form> 

public void SelectLanguage(object sender, EventArgs e) 
{ 
    string lang = ddllanguage.SelectedValue; 
    if (ddllanguage.SelectedIndex != 0) 
    { 
     repTable.DataSource = Data.GetAllLocalizations(lang); 
     repTable.DataBind(); 
    } 
} 

呼叫GetAllLocalizations將返回,以後用於填充問報時表數據庫實體的ArrayList。但是,DataBind函數會在調用時掛起,因此只要下拉列表發生更改,整個表單就會停止工作。如果數據綁定是在頁面加載而不是在事件處理程序中完成的,則它可以正常工作。我有另一個更舊的頁面,雖然它使用了同樣的方法(數據在下拉列表的事件處理程序中綁定),並且工作順利。

任何想法?

回答

1

我看到你打電話OnItemDataBound,我會檢查這個事件,有可能是有一些過程需要時間來完成或可能在一個無限循環。

+0

謝謝!似乎在OnItemDataBound的事件處理程序中發生了異常,並沒有以任何方式顯示。我只是假定DataBind調用掛起,因爲在調試期間控件立即返回到瀏覽器。 – Bevin

1

我在某種程度上同意Jekom。

也可以不直接顯示數據庫結果嗎?爲什麼他們首先被傳入數組?

我發現當使用中繼器或任何數據顯示器在SQL中創建存儲過程或函數並允許服務器執行此操作時。

您之所以這樣做可能有困難的原因是您要求客戶端計算出所有信息,並且您說有大量數據需要處理。

沒有更多信息就難以更具體