文件上传 - 返回空值
本文关键字:返回 空值 文件 | 更新日期: 2023-09-27 18:30:23
我正在 ASP.NET MVC应用程序中上传一个文件。在 .ascx 文件中,我有以下内容:
<form action="/Admin/Mail/ABC" enctype="multipart/form-data" method="post">
<div>
<input type="file" name="file" id="file" />
<input type="submit" value="Upload" id="UploadList" onclick="Origin.UploadOptOutList();"/>
</div>
在.js文件中:
Origin.UploadList = function () {
Origin.ajax({
url: '/Admin/Mail/Upload',
type: 'POST',
dataType: 'json',
success: function (data) {
alert('success!');
}
});
}
和控制器:
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
List<string> validIDs, invalidIDs;
if (file.ContentLength > 0)
{
// do something
}
}
从.js调用操作时,"文件"始终为 NULL。知道我错过了什么吗?
首先,除非您使用的是 HTML5,否则您无法异步上传文件。如果你仍然需要这个功能,你可能想尝试jQuery Form插件。
其次,在当前的js中,您不会随请求一起发送任何数据(ajax
方法选项中的字段data
),这就是为什么您在服务器端没有收到任何内容的原因。此外,正如我之前提到的,不可能在此请求中插入文件。这里最简单的解决方案是放弃 AJAX 并让文件以通常的方式上传:
视图:
<form action="/Admin/Mail/Upload" enctype="multipart/form-data" method="post">
<div>
<input type="file" name="file" id="file" />
<input type="submit" value="Upload" id="UploadList" />
</div>
</form>
这里没有js,服务器代码是一样的。
这就是你需要的
ScriptManager sm = ScriptManager.GetCurrent(Page);
sm.RegisterPostBackControl(btnEditSubmit);
Page.Form.Attributes.Add("enctype", "multipart/form-data");
Page.Form.Attributes.Add("method", "post");