我在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;
};