Jquery 文件输入字段未与其他表单数据mvc razor net core序列化
我有一个用户配置文件表单,其中包含基本姓名、联系人字段和附件选项(图像/文件等)。此表单与customeJquery 文件输入字段未与其他表单数据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
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/>