【问题标题】:ASP.NET Grid View not updating inside an update panelASP.NET 网格视图未在更新面板内更新
【发布时间】:2016-02-23 03:52:09
【问题描述】:

背景: 尽量避免完全回发并使用部分回发来刷新数据网格。我检查了 MSDN,堆栈溢出并尝试了控制值的不同组合来触发回发,但没有运气。

代码

 <asp:ScriptManager ID="sm1" runat="server" EnablePartialRendering="true" />
    <div>
        <asp:UpdatePanel ID="upTest" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true" >
            <ContentTemplate>
                <asp:GridView ID="gvTest" runat="server" Visible="true" ShowHeader="true" AutoGenerateColumns="false">
                    <Columns>
                         <asp:TemplateField>
                        <HeaderTemplate>
                            <div>Document Type</div>
                        </HeaderTemplate>
                        <ItemTemplate>
                            <asp:Label ID="txtDescription" Style="margin: 2px" MaxLength="254" Text='<%# Bind("DocName") %>' runat="server" Width="200px" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    </Columns>
                </asp:GridView>
                <br />
                <label>
                    <AjaxControlToolkit:AsyncFileUpload ID="AsyncFileUpload1" Width="400px" runat="server"
                        OnUploadedComplete="AsyncFileUpload1_UploadedComplete" />
                </label>
                <label id="lblStatus"></label>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>

背后的代码

 if (AsyncFileUpload1.HasFile)
    {
        string strPath = MapPath("~/Uploads/") + Path.GetFileName(e.filename);
        AsyncFileUpload1.SaveAs(strPath);
        SetGridData(1);
        upTest.Update();
    }

    private void SetGridData(int count)
{
    List<Document> Documents = new List<Document>();
    Document doc = new Document();
    doc.DocName = "test doc";
    for (int i = 0; i < count; i++)
    {
        Documents.Add(doc);
    }
    gvTest.DataSource = Documents;
    gvTest.DataBind();
}

在 Page_Load 时,网格加载了 5 个数据行,在异步回发时,网格被重置为一个数据行。在查看 chrome 调试器时,我可以看到网格数据来自服务器的 Page_Load(5 行)和异步加载(1 个数据行)。但是数据网格没有刷新。在异步回发期间,我确实调用了 grid.DataBind()。任何人有任何想法发生了什么?我错过了什么吗?

注意:一切都适用于普通的 ASP.Net 控件,只是不要使用 AJAX 文件上传控件

【问题讨论】:

  • 我确实在异步回发时调用了 Databind,是的,我尝试将更新模式设置为“始终”并设置异步回发触发器属性。在我分享的上述代码中,我没有使用这种方法。但我试过了。

标签: c# asp.net asp.net-ajax updatepanel aspxgridview


【解决方案1】:

您是否在SetGridData 中调用GridViewDataBind() 方法?并添加AsyncPostBackTrigger

看一个例子here

【讨论】:

    【解决方案2】:

    尝试 UpdateMode="Always" 。它会工作

    【讨论】:

    • 奇怪的是更新面板中没有 ajax asyncfileupload 控件。更新面板适用于普通的 asp 控件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2016-12-01
    • 2015-11-03
    • 1970-01-01
    • 2015-09-06
    相关资源
    最近更新 更多