【问题标题】:ASP.NET MVC 5 Multi select not binding during POSTPOST 期间 ASP.NET MVC 5 多选未绑定
【发布时间】:2023-04-08 06:27:02
【问题描述】:

我是 ASP.NET MVC 5 的新手,在提交表单时在 POST 期间仅绑定正文的多选部分时遇到了一些问题。表单正确呈现,复选框被正确选中。表单使用visual studio搭建(多选除外)

    public class EditViewModel
    {
        [Required]
        [Display(Name = "First Name")]
        public string FirstName { get; set; }

        [Required]
        [Display(Name = "LastName")]
        public string LastName { get; set; }
        public IList<RolesViewModel> Roles { get; set; }

    }


    public class RolesViewModel
    {
        public string RoleId { get; set; }
        public string RoleName { get; set; }
        public bool Selected { get; set; }
    }


      [HttpGet]
        public async Task<ActionResult> Edit(string Id)
        {...
            var model = Mapper.Map<ApplicationUser, EditViewModel>(user); 
            return View(model);
        }


        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Edit(EditViewModel model)
        {
        }

@model BloggingService.Web.Models.EditViewModel

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Edit</title>
</head>
<body>
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
        
    <div class="form-horizontal">
        <h4>Edit</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.Id)

        <div class="form-group">
            @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" })
            </div>
        </div>


        <div class="form-group">
            @Html.LabelFor(model => model.Roles, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">


                @for (int i = 0; i < Model.Roles.Count; i++)
                {

                    @Html.CheckBoxFor(x => @Model.Roles[i].Selected,"test1");
                    <div class="form-check">
                        <input type="hidden" asp-for="@Model.Roles[i].RoleId" />
                        <input type="hidden" asp-for="@Model.Roles[i].RoleName" />
                        <input type="checkbox" asp-for="@Model.Roles[i].Selected" class="form-check-input" checked="@Model.Roles[i].Selected" />
                        <label class="form-check-label" asp-for="@Model.Roles[i].Selected">
                            @Model.Roles[i].RoleName
                        </label>
                    </div>
                }
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
    }
    
    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>

非常感谢任何见解。

【问题讨论】:

  • 请出示您的表格并提交标签。

标签: c# asp.net-mvc-5 model-binding multi-select


【解决方案1】:

通过利用我的 for 循环中的 HTML 辅助方法,我设法找到了完成此类任务的正确和更简洁的方法,现在数据能够在数据绑定期间正确绑定。

  @Html.HiddenFor(x => @Model.Roles[i].RoleId);
  @Html.HiddenFor(x => @Model.Roles[i].RoleName);
  @Html.CheckBoxFor(x => @Model.Roles[i].Selected);

【讨论】:

    猜你喜欢
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    相关资源
    最近更新 更多