我在 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 中,请求标头具有 Content-Type: application/x-www-form-urlencoded; 字符集=UTF-8。我有另一个带有输入文件的表单,标题有 Content-Type: multipart/form-data; 边界=----WebKitFormBoundaryCfBFSR0RXQRnasfb,这种形式工作正常。我尝试在没有 Html 助手的情况下这样做,但同样的事情发生了。视图模型本身继承自输入文件实际所属的另一个视图模型,但随后我将一个字符串属性映射到文本框,并且表单正在获取该值。没有嵌套表单(在此页面上,这是唯一的表单),但我在使用包含如下表单的多个部分视图的另一个具有多个表单(非嵌套)的页面时遇到了同样的问题:
@using (Html.BeginForm("Edit", "Home", FormMethod.Post, new { @enctype = "multipart/form-data" })){ @Html.Partial("EditorTemplates/_Profile", Model.InstitutionProfileInformation)}
提前感谢您的帮助。
好的 - 这就是奇怪的地方。由于他们(原始编码员)使用部分视图,因此他们对这件事进行了 ajaxified。当部分视图(带有表单)被渲染时:
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