【发布时间】:2014-11-04 04:58:58
【问题描述】:
我有一个页面,其中大部分 HTML 是由客户端脚本 (JQuery) 生成的。我添加了一个服务器端 ASP.NET 文件控件来将文件上传到服务器。
现在文件在单击按钮时上传,这会导致 POSTBACK,因此所有文本框 Company Name、Street Name、City Client 等都会丢失,因为它们是由 JQuery 生成的。
我将上传部分放在 UpdatePanel 中并注册了 AsyncPostBack 触发器,但是我没有在代码隐藏处获取 HttpContext 对象。我使用 PostBackTrigger 将 Async 转换为完整的回发,然后事情变得和以前一样(即没有更新面板)。
现在我有两个问题要问你们: - 如果更新面板的行为方式与没有更新面板的页面相同,那么更新面板的用途是什么。 (回传触发器) - 出现上述问题该怎么办?
代码:
<asp:UpdatePanel ID="uploadUpdatePanel" runat="server">
<ContentTemplate>
<input id="fileField" type="file" runat="server" multiple="multiple" />
<asp:Button ID="uploadButton" runat="server" Text="Upload Documents" OnClick="uploadButton_Click" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="uploadButton" />
<%--<asp:PostBackTrigger ControlID="uploadButton" />--%>
</Triggers>
</asp:UpdatePanel>
【问题讨论】:
-
您必须在回发后重新创建控件。如果它们是在后面的 ASP.NET 代码中动态创建的,答案将是相同的:必须在每次回发时重新创建动态创建的控件。
-
在这里查看一些代码真的很有帮助。研究使用 AsyncPostBackTriggers
-
@KidBilly 请参阅上面的更新。
-
@Alexander 我不是从后面的代码创建控件,而是通过 JQuery。我无法重新创建它们。其次,用户还在框中填写了一些数据,即使我创建它们,我将如何填写?
-
嗯,你正在混合两个世界。如果您的控件将在代码隐藏中创建,我可以非常快速地回答这个问题;在每次回发时重新创建,ViewState 有助于保持用户输入。
标签: c# javascript jquery asp.net updatepanel