【发布时间】:2013-06-11 06:41:10
【问题描述】:
我正在尝试使用 Ajax.BeginForm() 上传文件,但没有成功。
我的观点包含:
@using (Ajax.BeginForm("UploadFile", null, new AjaxOptions { HttpMethod="POST", UpdateTargetId = "result" }, new { enctype = "multipart/form-data" }))
{
<label id="lblUploadNewFile" for="fileUploadControl">Upload New File</label>
<input type="file" name="fileToUpload" id="fileUploadControl"/>
<input id="btnFileUpload" type="submit" value="Upload" />
<span id="result" />
}
对应的Controller是:
[HttpPost]
public string UploadFile(FormCollection formData)
{
HttpPostedFileBase file=null;
try
{
file = Request.Files[0];
}
catch { }
if ( file!=null && file.ContentLength > 0)
{
file.SaveAs(string.Concat(
AppDomain.CurrentDomain.BaseDirectory,
Path.GetFileName(file.FileName)));
return "Successfully Uploaded";
}
else
{
return "Upload Failed, please try again.";
}
}
问题是它正在上传文件,但当我删除 jquery.unobtrusive-ajax.js 时不再做任何异步帖子。相反,它会进行完整的回发。
当我在我的视图中添加jquery.unobtrusive-ajax.js 时,它是异步执行的,但它不是在表单数据中发送上传文件。没有文件被发送到Request.Files[] 中的服务器。
【问题讨论】:
-
由于显而易见的原因,Ajax 不可能:您可以构建一个页面帽子,将访问者文件系统上的任何可访问文件上传到服务器而不告诉他。
标签: c# javascript asp.net-mvc-4