C# 添加jquery.unobtrusive-ajax.js引用后上载为空

C# 添加jquery.unobtrusive-ajax.js引用后上载为空,c#,jquery,ajax,asp.net-mvc,unobtrusive-ajax,C#,Jquery,Ajax,Asp.net Mvc,Unobtrusive Ajax,如果我不引用jquery.unobtrusiveajax.js,我可以在帖子中获得附件。如果我引用它,它会给我空值 <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script> @using (Ajax.BeginForm("Index", "ContactSubmission", new AjaxOptions{ InsertionMode = InsertionMode.Replace, HttpMeth

如果我不引用
jquery.unobtrusiveajax.js
,我可以在帖子中获得附件。如果我引用它,它会给我空值

<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>


@using (Ajax.BeginForm("Index", "ContactSubmission", new AjaxOptions{ InsertionMode = InsertionMode.Replace, HttpMethod = "POST", OnSuccess = "updateSuccess" },
     new { enctype = "multipart/form-data",@class = "form-horizontal", role = "form" }))
      {
               ///code here

如何处理这个问题?

如果您不引用
jquery.unobtrusive ajax.js
,您就不会得到
ajax
表单,而是一个常规的HTML表单。如果您这样做了,我想表单可以正常工作,但是不可能随它一起上传文件,因为ajax不允许
multipart/formdata
enctype


您可以使用HTML5文件API()或jQuery上传插件。

我修改了
jQuery.unobtrusive ajax.js
来上传文件。 第一次修改:

$(document).on("submit", "form[data-ext=true]", function (evt) {
        var clickInfo = $(this).data(data_click) || [],
            clickTarget = $(this).data(data_target),
            isCancel = clickTarget && clickTarget.hasClass("cancel");
        evt.preventDefault();
        if (!isCancel && !validate(this)) {
            return;
        }
        var formData;
        if (this.enctype && this.enctype === "multipart/form-data") {
            formData = new FormData(this);
        } else {
            formData = clickInfo.concat($(this).serializeArray());
        }

        asyncRequest(this, {
            url: this.action,
            type: this.method || "GET",
            data: formData
        });
    });
第二次修改在
asyncRequest
中:

....
method = options.type.toUpperCase();
if (options.data instanceof FormData) {
    options.processData = false;
    options.contentType = false;
    options.data.append("X-Requested-With", "XMLHttpRequest");

    if (!isMethodProxySafe(method)) {
        options.type = "POST";
        options.data.append("X-HTTP-Method-Override", method);
    }
} else {
    options.data.push({ name: "X-Requested-With", value: "XMLHttpRequest" });

    if (!isMethodProxySafe(method)) {
        options.type = "POST";
        options.data.push({ name: "X-HTTP-Method-Override", value: method });
    }
}
...

你不小心引用了它两次吗"? 检查布局和/或捆绑配置。它只在页面上引用了一个位置是的,我正在jquery对话框中打开局部视图。post结果将全部返回。我需要异步来捕获对话框中的结果。@James123,因此您需要使用一些jQuery上载插件或实现您自己的插件。这个修复程序可以工作,尽管我希望我们可以在不更改javascript库的情况下实现它。@davegaba我同意您的意见
....
method = options.type.toUpperCase();
if (options.data instanceof FormData) {
    options.processData = false;
    options.contentType = false;
    options.data.append("X-Requested-With", "XMLHttpRequest");

    if (!isMethodProxySafe(method)) {
        options.type = "POST";
        options.data.append("X-HTTP-Method-Override", method);
    }
} else {
    options.data.push({ name: "X-Requested-With", value: "XMLHttpRequest" });

    if (!isMethodProxySafe(method)) {
        options.type = "POST";
        options.data.push({ name: "X-HTTP-Method-Override", value: method });
    }
}
...