ASP.NET 网格视图未在更新面板中更新
本文关键字:更新 NET 网格 视图 ASP | 更新日期: 2023-09-27 18:35:56
背景:尝试避免完全回发并使用部分回发来刷新数据网格。我已经检查了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 数据行)上的服务器。但数据网格不会刷新。我确实打电话给网格。DataBind() 在异步回发期间。有人知道发生了什么吗?我错过了什么吗?
注意:一切都适用于普通 ASP.Net 控件,只是不适用于 AJAX 文件上传控件
您是否在SetGridData
中调用GridView
的DataBind()
方法?并添加一个AsyncPostBackTrigger
在这里看一个例子
试试 更新模式="总是" . 它会工作