Html.BeginForm 有效但无效 Ajax.BeginForm
Html.BeginForm works but not Ajax.BeginForm
我有一个 ASP MVC 应用程序正在尝试提交我的 ViewModel,它有一个名为 Document
的 属性,它是一个 HttpPostedFileBase
。当我使用 @Html.BeginForm
时,ViewModel 绑定良好,但是如果我将其更改为 @Ajax.BeginForm
并保持所有内容相同,它将绑定除 HttpPostedFileBase
[=23] 之外的所有 ViewModel 属性=].有什么建议吗?
相关代码:
[HttpPost]
public ActionResult Add(ViewModel vm)
{
return new HttpStatusCodeResult(200);
}
@using (Ajax.BeginForm("Add", "Home", new AjaxOptions() { HttpMethod = "Post" , AllowCache = false}, new { enctype = "multipart/form-data" }))
{
@Html.HiddenFor(m => Model.Document.DocumentType);
@Html.HiddenFor(m => Model.Document.DocumentTypeId);
@Html.HiddenFor(m => Model.Document.File);
<div class="container">
<table>
<tr>
<td>
<input class="form-control" type="text" id="lblAllReceivables" /> </td>
<td >
@Html.TextBoxFor(m => m.Document.File, new { type = "file", @class = "inputfile", @name = "file", @id = Model.Document.DocumentTypeId, @accept = ".pdf, .doc, docx" })
<label id="lblUpload" for="@Model.Document.DocumentTypeId"><i class="fa fa-upload" style="margin-right:10px;"></i>File</label>
</td>
</tr>
<tr>
<td colspan="2" >
Comments:<br />
<div class="input-group" style="width:100%;">
@Html.TextAreaFor(m => m.Document.Comments)
</div>
</td>
</tr>
<tr>
<td colspan="2"><hr /></td>
</tr>
<tr><td colspan="2" > <input id="btnSubmit" class="btn btn-default btn-lg" type="submit" style="width:275px;" value="Submit Application" /><a class="btn btn-default">Cancel</a></td></tr>
</table>
</div>
}
我发现浏览器不支持通过 xmlhttprequest 上传文件,这是 ajax.beginform 用于 post 数据的方式(所有浏览器 ajax 库也是如此)。如果您使用的是 html5 浏览器,您可以使用新文件 api 上传文件。对于旧版浏览器,您可以使用 iframe post 文件。 google 用于 jquery 包装这两个功能的插件或仅使用 iframe appraoch(它非常简单)。
在特定情况下,我更喜欢使用其他插件,例如 DropzoneJS 更好地处理它,您可以轻松上传多个文件。
我有一个 ASP MVC 应用程序正在尝试提交我的 ViewModel,它有一个名为 Document
的 属性,它是一个 HttpPostedFileBase
。当我使用 @Html.BeginForm
时,ViewModel 绑定良好,但是如果我将其更改为 @Ajax.BeginForm
并保持所有内容相同,它将绑定除 HttpPostedFileBase
[=23] 之外的所有 ViewModel 属性=].有什么建议吗?
相关代码:
[HttpPost]
public ActionResult Add(ViewModel vm)
{
return new HttpStatusCodeResult(200);
}
@using (Ajax.BeginForm("Add", "Home", new AjaxOptions() { HttpMethod = "Post" , AllowCache = false}, new { enctype = "multipart/form-data" }))
{
@Html.HiddenFor(m => Model.Document.DocumentType);
@Html.HiddenFor(m => Model.Document.DocumentTypeId);
@Html.HiddenFor(m => Model.Document.File);
<div class="container">
<table>
<tr>
<td>
<input class="form-control" type="text" id="lblAllReceivables" /> </td>
<td >
@Html.TextBoxFor(m => m.Document.File, new { type = "file", @class = "inputfile", @name = "file", @id = Model.Document.DocumentTypeId, @accept = ".pdf, .doc, docx" })
<label id="lblUpload" for="@Model.Document.DocumentTypeId"><i class="fa fa-upload" style="margin-right:10px;"></i>File</label>
</td>
</tr>
<tr>
<td colspan="2" >
Comments:<br />
<div class="input-group" style="width:100%;">
@Html.TextAreaFor(m => m.Document.Comments)
</div>
</td>
</tr>
<tr>
<td colspan="2"><hr /></td>
</tr>
<tr><td colspan="2" > <input id="btnSubmit" class="btn btn-default btn-lg" type="submit" style="width:275px;" value="Submit Application" /><a class="btn btn-default">Cancel</a></td></tr>
</table>
</div>
}
我发现浏览器不支持通过 xmlhttprequest 上传文件,这是 ajax.beginform 用于 post 数据的方式(所有浏览器 ajax 库也是如此)。如果您使用的是 html5 浏览器,您可以使用新文件 api 上传文件。对于旧版浏览器,您可以使用 iframe post 文件。 google 用于 jquery 包装这两个功能的插件或仅使用 iframe appraoch(它非常简单)。
在特定情况下,我更喜欢使用其他插件,例如 DropzoneJS 更好地处理它,您可以轻松上传多个文件。