0

我正在我的 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 调用 Action 时,“文件”始终为 NULL。知道我缺少什么吗?

4

2 回答 2

2

起初,您不能异步上传文件,除非您使用的是 HTML5。如果你仍然需要这个功能,你可能想试试jQuery Form plugin

其次,在您当前的 js 中,您没有随请求发送任何数据(方法选项data中的字段ajax),这就是为什么您在服务器端没有收到任何数据的原因。此外,正如我之前提到的,不可能在此请求中插入文件。这里最简单的解决方案是放弃 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,服务器代码是一样的。

于 2012-04-06T19:08:40.963 回答
1

这就是你需要的

ScriptManager sm = ScriptManager.GetCurrent(Page);
            sm.RegisterPostBackControl(btnEditSubmit);
            Page.Form.Attributes.Add("enctype", "multipart/form-data");
            Page.Form.Attributes.Add("method", "post");
于 2012-11-05T21:43:14.940 回答