【问题标题】:Code-behind hangs when data binding Repeater control数据绑定Repeater控件时代码隐藏挂起
【发布时间】:2013-06-04 11:32:38
【问题描述】:

我正在处理 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,这些实体稍后用于填充Repeater 表。但是,DataBind 函数在调用时会挂起,因此只要下拉列表发生更改,整个表单就会停止工作。如果数据绑定是在页面加载时完成的,而不是在事件处理程序中,它工作正常。我有另一个使用相同方法的旧页面(下拉列表的事件处理程序中的数据绑定)并且它可以顺利运行。

有什么想法吗?

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    我看到你打电话给OnItemDataBound,我会检查这个事件,可能有一些过程需要时间才能完成或者可能处于无限循环中。

    【讨论】:

    • 谢谢! OnItemDataBound 的事件处理程序中似乎发生了异常,并且没有以任何方式显示。我只是假设 DataBind 调用挂起,因为在调试期间控制立即返回给浏览器。
    【解决方案2】:

    我会在一定程度上同意 Jekom。

    你也可以不直接显示数据库结果吗?为什么要先将它们传递到数组中?

    我发现在使用中继器或任何数据显示时,都是在 SQL 中创建存储过程或函数并允许服务器完成工作。

    您在处理方式上可能遇到困难的原因是您要求客户计算出所有信息,并且您说需要处理大量数据。

    如果没有更多信息,很难更具体

    【讨论】:

      猜你喜欢
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      相关资源
      最近更新 更多