1

我有如下代码

看法:

$("form").live('submit', function () {
var formData = $(this).toObject();

$.ajax({
  url: "../Home/Index",
  type: "POST",
  dataType: "json",
  data: formData,
  success: function (data) {<<Some handling>>
}

控制器:

public JsonResult Index(Task task)
{
 //operations on the task object like getting data from task and setting to it.
}

任务在这里是一个模型。这里当表单提交时,表单对象直接发送给控制器,控制器作为模型接收它。这种转换是如何发生的?我现在在表单中添加了一个文件组件

<input type="file" name = "file" id="file"/>

并将文件属性添加到模型任务。

public HttpPostedFileBase file{ get; set; }

但我正在获取null控制器中的文件。但所有其他价值都在顺利进行。

请帮帮我。如果您需要任何其他信息来正确理解我的问题,请告诉我。

4

2 回答 2

2

通常是模型绑定器负责将请求值转换为模型。

但在您的情况下,您似乎正在尝试使用 AJAX 发送文件。这是不支持的。原因是 jQuery 的 ajax 方法不支持。如果客户端浏览器支持,您可以使用HTML5 File API它,因为 XHR2 对象允许您将文件异步上传到服务器。这是一个例子:

$(document).on('submit', 'form', function () {
    var xhr = new XMLHttpRequest();
    xhr.open(this.method, this.action);
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            alert(xhr.responseText); // handle response.
        }
    };
    xhr.send(new FormData(this));
    return false;
}

另请注意,我已使用该.on()方法订阅提交事件,而不是.live()已过时并已在 jQuery 1.9 中删除。

另一方面,如果您需要支持旧版浏览器,则可以使用诸如Fine Uploader或的插件jQuery form来完成此任务。这些插件所做的是检测浏览器的功能,如果它支持 XHR2,它将使用它,如果不支持,它将使用不同的技术(例如隐藏 iframe、flash ......)。

于 2013-02-19T22:05:56.013 回答
0

您不能直接使用 jquery ajax post 上传文件。你应该为此添加一些插件。也许你可以使用这个插件

这个问题将向您展示使用此插件的起点。

另外,我也是从@DarinDimitov 的建议中学到的:)

于 2013-02-19T22:05:47.870 回答