背景 试图避免完整的回发并使用部分回发来刷新数据网格。我已经检查了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文件上传控件
答案 0 :(得分:1)
您是否在DataBind()
内调用了GridView
的{{1}}方法?并添加SetGridData
查看示例here
答案 1 :(得分:0)
尝试UpdateMode =“始终”。它会起作用