我正在處理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
函數會在調用時掛起,因此只要下拉列表發生更改,整個表單就會停止工作。如果數據綁定是在頁面加載而不是在事件處理程序中完成的,則它可以正常工作。我有另一個更舊的頁面,雖然它使用了同樣的方法(數據在下拉列表的事件處理程序中綁定),並且工作順利。
任何想法?
謝謝!似乎在OnItemDataBound的事件處理程序中發生了異常,並沒有以任何方式顯示。我只是假定DataBind調用掛起,因爲在調試期間控件立即返回到瀏覽器。 – Bevin