c# - MVC 模型未绑定(bind)且表单数据包含 %5B0%5D

标签 c# asp.net-mvc model

我正在尝试执行 POST 请求,但我的模型在 POST 上绑定(bind)并且数据为空,
但是我可以在 Request.Form 对象中看到所有这些数据,但是所有的 Keys 都附加了 %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>
这是我的 Controller
        [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 似乎正在绑定(bind) List 的数据,因此首先您需要确保这一点。但我可以看到你有正确的 View (不是列表)。或者,如果对您有用,请尝试这两种解决方案中的任何一种。
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 :更改您的更新方法,并将参数作为列表模型而不是 Web_Users 模型并采用第一个值
[HttpPost]
public JsonResult Update(List<Web_Users> models)
{
    return Json(ChangeModel.UpdateUsers(models.FirstOrDefault()));
}

关于c# - MVC 模型未绑定(bind)且表单数据包含 %5B0%5D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63704080/

相关文章:

ruby-on-rails-3 - 在 Rails 模型中格式化日期

python - 不能在 pydantic init 函数中定义变量

顶点和边的模型架构

c# - 在 C# MVC3 中缓存 JSON 数据

c# - 当用户从上下文菜单中选择 "Copy"时如何将数据复制到剪贴板

c# - 比较数据表中的值,如果它们相同则更改它

javascript - 如何为 id 的 @html.validation 赋值?

c# - 获得 Entity Framework 6 的最佳性能,如 Dapper.NET

c# - 如何在助手中使用 TextBoxFor?

asp.net-mvc - 用于管理外部数据的 ASP.Net GUI/CMS 框架