gpt4 book ai didi

c# - ASP.NET MVC 无法通过绑定(bind)到复选框来发布 View 模型

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:08 25 4
gpt4 key购买 nike

这是我的 View 模型:

public class UserViewModel
{
public User GroupUser { get; set; }
public bool Checked { get; set; }
}

public class GroupUserViewModel
{
public Guid GroupId { get; set; }
public string GroupName { get; set; }
public IList<UserViewModel> Users;
}

我的看法:

@model GroupUserViewModel

@{
ViewBag.Title = "Users";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>@Model.GroupName</h2>

@using (Html.BeginForm("AddUserToGroup", "Group", FormMethod.Post))
{
for (var userIter = 0; userIter < Model.Users.Count(); userIter++)
{
<div class="form-group">
@Html.DisplayFor(model => model.Users[userIter].GroupUser.UserName)
@Html.CheckBoxFor(model => model.Users[userIter].Checked)

@Html.HiddenFor(model => model.GroupId)
@Html.HiddenFor(model => model.GroupName)
</div>
}

<input type="submit" class="btn btn-success" value="Save"/>
}

我的 Controller :

[HttpPost]
public ActionResult AddUserToGroup(GroupUserViewModel groupUsers)
{
//do things
}

我检查了 POST 数据,它是:

Users[0].Checked=true
Users[0].Checked=false
Users[1].Checked=false

对于我勾选的框,有 2 个条目,一个 true 和一个 false。这正常吗?

同样在 Controller 中,我得到的是:

groupUsers.GroupId = {00000000-0000-0000-0000-000000000000}
groupUsers.GroupName = null
groupUsers.Users = null

显然,由于表单实际上并未将我想要的 View 模型发布回 Controller ,所以会发生这种情况。因为我需要 GroupIdGroupName,有没有办法将所需的 View 模型传回 Controller ?

编辑:

经过一些更新并为 GroupIdGroupName 添加隐藏字段后,现在 POST 数据为:

Users[0].Checked=true
Users[0].Checked=false
Id=015f5aef-eb6c-449e-9f08-9d42110c5347
GroupName=MyName
MyObjects[1].Checked=false
Id=015f5aef-eb6c-449e-9f08-9d42110c5347
GroupName=MyName

GroupIdGroupName 现在正在正确传递,但列表仍然是 null

最佳答案

是的,这很正常。原因是因为未选中的复选框不会发布值,因此 ASP.NET 为每个具有与复选框控件后的复选框相同 ID 的复选框呈现一个隐藏字段,并将其值设置为 false。如果有多个同名的表单字段,ASP.NET DefaultModelBinder 将取第一个值。如果未选中该复选框,这将导致从隐藏字段中发布一个 false 值,以及两个值,一个 false 用于隐藏字段,一个 true 用于选中的复选框。因为隐藏字段在复选框之后,如果复选框发布一个值,它将覆盖隐藏字段。但是,这并没有回答您关于模型为何不具有约束力的问题。

关于c# - ASP.NET MVC 无法通过绑定(bind)到复选框来发布 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32760817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com