当数据绑定中继器控件时,代码隐藏会挂起
本文关键字:代码 隐藏 挂起 数据绑定 中继器 控件 | 更新日期: 2023-09-27 18:16:46
我在ASP的web表单工作。. NET 4,我需要根据下拉列表中的选择显示表中的条目的长列表。我有以下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,这些数据库实体稍后将用于填充Repeater表。但是,DataBind
函数在调用时挂起,因此无论何时更改下拉列表,整个表单都会停止工作。如果数据绑定是在页面加载时完成的,而不是在事件处理程序中,则可以正常工作。我有另一个,旧的页面,使用相同的方法虽然(数据绑定在下拉列表的事件处理程序),它的工作没有任何障碍。
任何想法?
我看到你调用OnItemDataBound
,我会检查这个事件,可能有一些过程需要时间来完成或可能处于无限循环
我在某种程度上同意Jekom的观点。
也可以不直接显示数据库结果吗?为什么要先将它们传递到数组中?
我发现当使用中继器或任何数据显示时,都是在SQL中创建存储过程或函数,并允许服务器完成工作。
你这样做可能有困难的原因是你要求客户计算出所有的信息,而你说有大量的数据要处理。
没有更多的信息,很难更具体