如何解决MVC模型未绑定,并且表单数据包含%5B0%5D
我正在尝试执行POST
请求,但是我的模型在POST上绑定并且Data为空,
但是,我可以在Request.Form对象中看到所有这些数据,但是所有键都附加了%5B0%5D.
,我想这可能导致此问题。
我尝试过Direct Form POST和jQuery AJAX POST
都存在相同的问题。
这是我的观点。
@model Web_Users
<div class="enroll-step wrap">
<div class="enroll-begin thumbnail" style="padding:20px;">
<h6 class="text-danger">@title</h6><br />
@using (Ajax.BeginForm("Update","User",null,new AjaxOptions { HttpMethod = "POST",OnComplete = "MemberUpdateComplete(xhr,this)" },new { id = "enroll-form",role = "form" }))
{
@Html.HiddenFor(x => x.UserId)
<div class="row">
<div class="col-sm-6 col-xs-12">
<div class="form-group">
@Html.LabelFor(x => x.FirstName,Resources.Members.FirstName,new { @class = "sr-only" })
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
@Html.TextBoxFor(x => x.FirstName,new { @class = "form-control",placeholder = Resources.Members.FirstName,@readonly = "readonly" })
</div>
@Html.LabelFor(x => x.LastName,Resources.Members.LastName,new { @class = "sr-only" })
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
@Html.TextBoxFor(x => x.LastName,placeholder = Resources.Members.LastName,@readonly = "readonly" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(x => x.DOB,new { @class = "sr-only" })
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
@Html.TextBoxFor(x => x.DOB,"{0:yyyy-MM-dd}",placeholder = "DOB" })
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="text-center">
<button class="btn btn-lg btn-primary" type="submit" data-loading-text="<img src='@Url.Content("~/Content/images/loader.gif")' /> Save </button>
</div>
</div>
</div>
这是我的控制器
[HttpPost]
public JsonResult Update(Web_Users models)
{
return Json(ChangeModel.UpdateUsers(models));
}
我已经尝试过这个Jquery POST
<script>
$(document).ready(function () {
$("#btnsubmit").click(function (e) {
//Serialize the form datas.
var frmdata = $('form#enroll-form').serialize();
$.ajax({
url: "/User/Update",type: "POST",dataType: 'json',contentType: 'application/x-www-form-urlencoded; charset=UTF-8',data: frmdata
});
});
});
解决方法
我明白了,实际上%5B0%5D.
是[0].
的编码文本,看来您的View正在绑定List的数据,因此首先需要确保这一点。但我可以看到您具有正确的视图(未列出)。或者,如果适合您,请尝试这两种解决方案中的任何一种。
1 :以这种方式更新您的jQuery AJAX代码,它将从表单数据中删除所有这些编码的文本
<script>
$(document).ready(function () {
$("#btnsubmit").click(function (e) {
//Serialize the form datas.
var frmdata = $('form#enroll-form').serialize().split('%5B0%5D.').join('');
$.ajax({
url: "/User/Update",type: "POST",dataType: 'json',contentType: 'application/x-www-form-urlencoded; charset=UTF-8',data: frmdata
});
});
});
2 :更改您的Update方法,但将参数更改为List模型而不是Web_Users模型,并采用First Value
[HttpPost]
public JsonResult Update(List<Web_Users> models)
{
return Json(ChangeModel.UpdateUsers(models.FirstOrDefault()));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。