Jquery 文件输入字段未与其他表单数据mvc razor net core序列化

Jquery 文件输入字段未与其他表单数据mvc razor net core序列化,jquery,asp.net-mvc,asp.net-mvc-4,razor,.net-core,Jquery,Asp.net Mvc,Asp.net Mvc 4,Razor,.net Core,我有一个用户配置文件表单,其中包含基本姓名、联系人字段和附件选项(图像/文件等)。此表单与customeviewModel绑定,该自定义视图模型对除input type=file 这是我的html代码 <div class="form-group"> <label>First Name*</label> <input asp-for="systemUser.FirstNam

我有一个用户配置文件表单,其中包含基本姓名、联系人字段和附件选项(图像/文件等)。此表单与custome
viewModel
绑定,该自定义视图模型对除
input type=file

这是我的html代码

<div class="form-group">
                    <label>First Name*</label>

                    <input asp-for="systemUser.FirstName" class="form-control" />
                </div>

                <div class="form-group">
                    <label>Middle Name*</label>
                    <input asp-for="systemUser.MiddleName" class="form-control" />
                </div>

                <div class="form-group">
                    <label>Last Name*</label>
                    <input asp-for="systemUser.LastName" class="form-control" />
                </div>

   <div class="panel panel-default">
            <div class="panel-heading">
                <i class="fa fa-edit"></i>
                <b class="panel-title"> Contact Info. </b>
            </div>
            <div class="panel-body">
                <div class="form-group">
                    <label>Description</label>
                    <input asp-for="userContactDetail.ContactDescription" class="form-control" />
                </div>

                <div class="form-group">
                    <label>Type</label>
                    <select class="form-control" asp-for="userContactDetail.ContactTypeId" asp-items="@(new SelectList(Model.contactTypes, "Id", "Name"))"><option value="-1"></option></select>
                </div>
                <div class="form-group">
                    <label>Contact Number</label>
                    <input asp-for="userContactDetail.ContactNumber" class="form-control" />
                </div>
                <div class="form-group">
                    <label>Extension</label>
                    <input asp-for="userContactDetail.ContactExtension" class="form-control" />
                </div>
                <div class="row">
                    <label class="col-sm-6 form-group">
                        <input type="checkbox" asp-for="userContactDetail.PrimaryContact" />
                        Primary
                    </label>
                    <label class="col-sm-6 form-group">
                        <input type="checkbox" asp-for="userContactDetail.PrivateContact" />
                        Private
                    </label>
                </div>
                <div class="form-group">

                </div>
                <div class="form-group pull-right">
                    <button id="btnAddContact" class="btn btn-sm btn-primary"><i class="fa fa-dot-circle-o"></i> Add</button>
                    <button id="btnCancelContact" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i> Cancel</button>
                </div>
            </div>
            <div class="form-group panel-body">
                <div class="table-responsive">
                    <table class="table table-striped table-bordered table-hover" id="tblContacts" name="tblContacts">
                        <thead class="bg-primary">
                            <tr>
                                <th>Description</th>
                                <th>Type</th>
                                <th>Contact Number</th>
                                <th>Extension</th>
                                <th>Primary</th>
                                <th>Private</th>
                                <th></th>
                                <th hidden></th>
                            </tr>
                        </thead>
                        <tbody>


                            @for (int i = 0; i < Model.lstContacts.Count; i++)
                            {
                                <tr>
                                    <td hidden>@Html.HiddenFor(con => Model.lstContacts[i].UserContactDetailId)</td>
                                    <td hidden>@Html.HiddenFor(con => Model.lstContacts[i].ContactDescription)</td>
                                    <td>@Html.DisplayFor(con => Model.lstContacts[i].ContactDescription)</td>
                                    <td hidden> @Html.HiddenFor(con => Model.lstContacts[i].ContactTypeId) </td>
                                    <td> @Html.DisplayFor(con => Model.lstContacts[i].ContactTypeName) </td>
                                    <td hidden> @Html.HiddenFor(con => Model.lstContacts[i].ContactNumber)</td>
                                    <td> @Html.DisplayFor(con => Model.lstContacts[i].ContactNumber)</td>

                                    <td hidden> @Html.HiddenFor(con => Model.lstContacts[i].ContactExtension) </td>
                                    <td> @Html.DisplayFor(con => Model.lstContacts[i].ContactExtension) </td>
                                    <td hidden> @Html.HiddenFor(con => Model.lstContacts[i].PrimaryContact)</td>
                                    <td> @Html.DisplayFor(con => Model.lstContacts[i].PrimaryContact)</td>
                                    <td hidden> @Html.HiddenFor(con => Model.lstContacts[i].PrivateContact)</td>
                                    <td> @Html.DisplayFor(con => Model.lstContacts[i].PrivateContact)</td>

                                    <td>
                                        <a onclick="EditUserContact(this)" class="btn-sm btn-primary" style="margin:2px;">
                                            <i class="fa fa-folder-open"></i> Edit
                                        </a>
                                        <a onclick="DeleteUserContact(this)" class="btn-sm btn-danger" style="margin:2px;">
                                            <i class="fa fa-ban"></i> Delete
                                        </a>
                                    </td>
                                    <td hidden>@Html.HiddenFor(con => Model.lstContacts[i].IsDeleted)</td>
                                </tr>

                            }
                        </tbody>
                    </table>
                </div>
            </div>
        </div>

 <div class="panel panel-default">
                <div class="panel-heading">
                    <i class="fa fa-edit"></i>
                    <b class="panel-title"> Attachment </b>
                </div>
                <div class="panel-body">
                        <input type="file" name="file" asp-for="lstAttachments" accept="application/pdf,application" multiple/>

                </div>
            </div>

 <button type="submit" id="btnUpdateProfile" class="btn btn-success">Update Profile</button>
当我提交表单时,我的控制器中的
lstaachments
总是为空,而其他数据是完全正确的。我尝试过很多解决方案,比如

但这对我不起作用。然后我试着这样做

var fd = new FormData();

var file_data = object.get(0).files[i]; //get file data
var other_data = $('form').serialize();  // get form data

fd.append("file", file_data);
但再一次,没有任何帮助来解决我的问题。。。有人能解释一下我遗漏了什么吗?任何形式的帮助都将不胜感激

更新

这是我的表格标签

<form asp-action="UpdateProfile" method="post" id="formUpdateProfile" enctype="multipart/form-data">


您需要使用
FormData
,但每个单独的名称/值都需要添加到
FormData
。你可以简单地使用

var formdata = new FormData($('#formUpdateProfile').get(0));
它将序列化所有表单控件,包括文件输入,然后调用ajax

$.ajax({
    url: "/Admin/UpdateProfile", // recommend you use '@Url.Action("UpdateProfile", "Admin")'
    type: "POST",
    data: formData,
    processData : false,
    contentType: false,
    dataType: "json",
    success: function (data) {
但是,您可以为文件输入指定一个与模型属性无关的名称属性。更改html以删除
name=“file”
属性,以便为模型绑定生成正确的属性(
name=“lstaachments”

<input type="file" asp-for="lstAttachments" accept="application/pdf,application" multiple/>


您需要使用
FormData
-请参阅-
var FormData=new FormData($(“#formUpdateProfile”).get(0))我也尝试过使用FormData,但它不会在dupe上传递任何值!我的错。我缺少带有表单名称的签名。但问题仍然存在。我正在获取除
lst附件
之外的所有数据。它总是空的。那么什么是属性
lstaachments
,为什么给它一个不同的name属性?(你到底为什么要为
lstContacts
的属性生成所有这些隐藏的输入)
<input type="file" asp-for="lstAttachments" accept="application/pdf,application" multiple/>