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
は、後で Repeater テーブルに入力するために使用されるデータベース エンティティを含む ArrayList を返します。ただし、DataBind
関数は呼び出し時にハングするため、ドロップダウン リストが変更されるたびにフォーム全体が機能しなくなります。データ バインドがイベント ハンドラーではなくページの読み込み時に行われる場合、正常に動作します。ただし、これと同じ方法 (ドロップダウン リストのイベント ハンドラーでのデータ バインド) を使用する別の古いページがあり、問題なく動作します。
何か案は?