尝试在NET 4.5 / C#Web应用程序的updatepanel中使用FileUpload或AsyncFileUpload控件。
我已尝试在我的母版页中使用标准Scriptmanager或ToolKitScriptManager。
我的保存按钮设置为PostBackTrigger(也尝试过AsyncPostbackTrigger)。
无论如何,我的(异步)FileUpload.HasFile总是返回false。
删除updatepanel,两个uploadcontrol都可以正常工作。
真正让我感到震惊的是我在另一个项目中工作(masterpage中的scriptmanager,updatepanel中的Fileupload,SaveButton是PostbackTrigger)。
是否存在可能导致问题的特定AJAX版本或.NET版本?
这非常令人沮丧。
答案 0 :(得分:11)
将按钮添加到UpdatePanel的触发器标签,我得到了它的工作:
<link rel="stylesheet" href="https://rawgit.com/esvit/ng-table/master/dist/ng-table.min.css">
<script src="https://rawgit.com/esvit/ng-table/master/dist/ng-table.min.js"></script>
我没有必要做任何不同的服务器端(如user5159158&#39;)
答案 1 :(得分:6)
文件上传不适用于部分回发。它需要完整的页面请求。因此,请在页面加载中添加以下行。
ScriptManager.GetCurrent(this).RegisterPostBackControl(this.YourControlID);
答案 2 :(得分:2)
FileUpload需要完整页面请求。这是对所有AJAX框架中使用的XmlHttpRequest组件的限制,用于对应用程序的异步调用。
真正让我感到震惊的是我在另一个项目中工作 (masterpage中的scriptmanager,updatepanel中的Fileupload,SaveButton是 PostbackTrigger)。
我认为你正在使用Full PostBack,虽然 FileUpload位于** UpdatePanel 内。
例如,
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="SaveButton" runat="server" OnClick="SaveButton_Click"
Text="Upload your file" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="SaveButton" />
</Triggers>
</asp:UpdatePanel>
如果您将 AsyncFileUpload 与 UpdatePanel 一起使用,则 AsyncFileUpload.HasFile 应仅在 UploadedComplete 内进行检查(你无法检查内部按钮点击事件)。
原因是 AsyncFileUpload 通过 Async 单独上传文件。
注意: 确保使用ToolkitScriptManager而不是ScriptManager
<ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="Server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<ajaxToolkit:AsyncFileUpload runat="server" ID="AsyncFileUpload1"
OnUploadedComplete="AsyncFileUpload1_UploadedComplete" />
<asp:TextBox runat="server" ID="TextBox1" /><br/>
<asp:Button ID="SaveButton" runat="server" OnClick="SaveButton_Click"
Text="Save" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="SaveButton" />
</Triggers>
</asp:UpdatePanel>
private string FileName
{
get { return (string)(Session["FileName"] ?? ""); }
set { Session["FileName"] = value; }
}
protected void SaveButton_Click(object sender, EventArgs e)
{
string fileName = FileName;
string path = Server.MapPath("~/App_Data/");
var fileInfo = new FileInfo(path + FileName);
}
protected void AsyncFileUpload1_UploadedComplete(object sender,
AsyncFileUploadEventArgs e)
{
if (AsyncFileUpload1.HasFile)
{
FileName = AsyncFileUpload1.FileName;
string path = Server.MapPath("~/App_Data/");
AsyncFileUpload1.SaveAs(path + AsyncFileUpload1.FileName);
}
}
我个人不喜欢在 UpdatePanel 中使用 AsyncFileUpload 。相反,如果我需要上传文件,我宁可使用Full PostBack。
答案 3 :(得分:2)
在Page_Load中添加:Page.Form.Attributes.Add("enctype", "multipart/form-data");