表单有enctype =“multipart / form-data”但Request Content-Type是application / x-www-form-urlencoded;字符集= UTF-8

时间:2013-10-29 16:28:19

标签: forms asp.net-mvc-4 file-upload

我在ASP.Net MVC4中有一个使用Html助手的基本表单。我在表单中有一个输入文件,用于上传将添加到数据库的文件。在我的视图模型中,我有一个输入文件的属性:

        public HttpPostedFileBase AssetFile { get; set; }

在我看来,我有表格助手:

@using (Html.BeginForm("Create", "Contact", FormMethod.Post, new { enctype = "multipart/form-data" }))

在我的表格中:

@Html.TextBoxFor(model => model.AssetFile, new { @type = "file", @name = "AssetFile" })

然而,当我发布表单时,Request.Files中没有文件。然后我注意到在Fiddler中,Request Header有Content-Type:application / x-www-form-urlencoded;字符集= UTF-8。我有另一个带有输入文件的表单,标题有Content-Type:multipart / form-data; boundary = ---- WebKitFormBoundaryCfBFSR0RXQRnasfb,这个表单工作正常。我尝试没有Html助手这样做,同样的事情发生。视图模型本身继承自输入文件实际所属的另一个视图模型,但后来我将字符串属性映射到文本框,并且表单正在拾取此值。没有嵌套表单(在此页面上这是唯一的表单)但是我使用包含多个部分视图的多个表单(不是嵌套)的另一个页面遇到了同样的问题:

@using (Html.BeginForm("Edit", "Home", FormMethod.Post, new { @enctype = "multipart/form-data" })){ @Html.Partial("EditorTemplates/_Profile", Model.InstitutionProfileInformation)}

提前感谢您的帮助。

好的 - 这是奇怪的。由于他们(原始编码器)使用部分视图,因此他们对此事进行了调整。当呈现局部视图(带有表单)时:

    var loadContactDiv = function (e) {
    isChanged = false;
    var url = e.href;
    $("#Contacts").load(url, function (response, status, xhr) {
        if (status == "error") {
            var msg = "Sorry but there was an error: ";
        }

        $("#Contacts").find('form').submit(divSubmitHandler).change(function () {
            isChanged = true;
        });

        $("#ReturnButton").click(function () {
            loadContacts();
        });
    });
    return false;
};

然后当用户点击提交按钮时:

    var divSubmitHandler = function () {
    var form = $("#Contacts").find('form');
    var test = form.serialize();

    debugger;
    $.ajax({
        url: (form).attr('action'),
        data: form.serialize(),
        type: "POST",
        success: function (data) {
            if (data == "") {
                loadContacts();
            } else {
                $("#Contacts").html(data);

                $("#Contacts").find('form').submit(divSubmitHandler).change(function () {
                    isChanged = true;
                });
                $("#ReturnButton").click(function (e) {
                    loadContacts();
                });
            }
        }
    });

    return false;
};

仍然卡住:http://prntscr.com/20v2cp

0 个答案:

没有答案