MVC 模型未绑定且表单数据包含 %5B0%5D

kc-*_*dev 3 c# asp.net-mvc model

我正在尝试执行一个POST请求,但是我的模型在 POST 上绑定并且数据为空,但是我可以在 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, new { @class = "form-control", 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}", new { @class = "form-control", 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>
Run Code Online (Sandbox Code Playgroud)

这是我的控制器

        [HttpPost]
        public JsonResult Update(Web_Users models)
        {
            return Json(ChangeModel.UpdateUsers(models));
        }
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个 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
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

Cha*_*mar 5

我明白了,实际上%5B0%5D.是编码文本,[0].并且您的视图似乎正在绑定列表的数据,因此首先您需要确保这一点。但我可以看到你有正确的视图(不是列表)。或者,如果对您有用,请尝试这两种解决方案中的任何一种。

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
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

2:更改您的更新方法,并将参数作为列表模型而不是 Web_Users 模型并采用第一个值

[HttpPost]
public JsonResult Update(List<Web_Users> models)
{
    return Json(ChangeModel.UpdateUsers(models.FirstOrDefault()));
}
Run Code Online (Sandbox Code Playgroud)