use*_*235 7 c# asp.net file-upload
尝试在NET 4.5/C#Web应用程序的updatepanel中使用FileUpload或AsyncFileUpload控件.
我已尝试在我的母版页中使用标准Scriptmanager或ToolKitScriptManager.
我的保存按钮被设置为PostBackTrigger(也尝试过AsyncPostbackTrigger).
无论如何,我的(异步)FileUpload.HasFile总是返回false.
删除updatepanel,两个uploadcontrols工作正常.
真正让我感到震惊的是我在另一个项目中工作(masterpage中的scriptmanager,updatepanel中的Fileupload,SaveButton是PostbackTrigger).
是否有某些特定的AJAX版本或.NET版本会导致问题?
这非常令人沮丧.
cal*_*sto 14
将按钮添加到UpdatePanel的触发器标签,我得到了它的工作:
<asp:UpdatePanel ID="UpdatePanel" runat="server">
<ContentTemplate>
<asp:FileUpload ID="FileUpload" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Upload"
OnClick = "btnUpLoad_OnClick" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID = "btnUpload" />
</Triggers>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
我没有必要做任何不同的服务器端(如user5159158的答案).
在 Page_Load 添加: Page.Form.Attributes.Add("enctype", "multipart/form-data");
FileUpload 需要整页请求。这是所有 AJAX 框架中用于异步调用应用程序的 XmlHttpRequest 组件的限制。
真正让我感到困惑的是,我在另一个项目中使用了它(母版页中的脚本管理器,更新面板中的 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>
Run Code Online (Sandbox Code Playgroud)
如果您将AsyncFileUpload与UpdatePanel一起使用,则AsyncFileUpload.HasFile应仅在UploadedComplete 内检查(您不能在 Button click event 内检查)。
原因是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);
}
}
Run Code Online (Sandbox Code Playgroud)
我个人不喜欢在UpdatePanel 中使用AsyncFileUpload。相反,如果我需要上传文件,我宁愿使用 Full PostBack。
小智 6
文件上传不适用于部分回发.它需要完整的页面请求.因此,在页面加载中添加以下行.
ScriptManager.GetCurrent(this).RegisterPostBackControl(this.YourControlID);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44298 次 |
| 最近记录: |