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 更好地处理它,您可以轻松上传多个文件。