MVC 3 从视图、模型中检索复选框值
Posted
技术标签:
【中文标题】MVC 3 从视图、模型中检索复选框值【英文标题】:MVC 3 Retrieve checkbox values from View, Model 【发布时间】:2015-11-29 17:58:31 【问题描述】:也许(实际上我确定)是我,但我似乎无法弄清楚如何检索列表项作为模型对象的一部分。 here 的帖子似乎让每个人都满意,但在我有限的理解中,这两个答案都不相关。 我需要获取已检查的项目,以便更新 Db。听起来很简单。
我的模特:
public class UserAdminModel
public Guid UserId get; set;
public string UserName get; set;
public List<UserRole> UserRoles get; set;
public string csvAllRolls get; set;
public class UserRole
public Guid RoleId get; set;
public string UserRoleName get; set;
public bool UserisinRole get; set;
我的观点:
<% using (html.BeginForm("UpdateRoles", "UserAdmin", FormMethod.Post))
%>
<input type="hidden" id="UserId" name="UserId" value="<%: Model.UserId %>" />
...
<% foreach (var role in Model.UserRoles)
%>
<tr>
<td> </td>
<td colspan="2" nowrap="nowrap"><%: role.UserRoleName %></td>
<td> </td>
<td>
<input type="checkbox" id="UserRoles" name="UserRoles" value="<%: role.UserRoleName %>"
<% if (role.UserisinRole) %>
checked="checked"
<% %>
/></td>
</tr>
<% %>
...
<input type="submit" name="Submit" value="Update Roles" /></td>
<% %>
我的控制器:
[HttpPost]
public ActionResult UpdateAllRoles(UserAdminModel model)
Guid uid = new Guid( Request["UserId"]);
return RedirectToAction("Index", "MyController");
UserId 很好,但模型的其余部分为空。任何帮助将不胜感激。
【问题讨论】:
您创建了带有name
属性的复选框,这些属性与您的模型完全没有关系。这样做的目的是为了列出所有可用的角色并能够将它们分配给用户(通过选择复选框)?
是的,我想列出所有角色(带有复选框),预先选择用户已经分配到的角色,然后通过选中或取消选中所需角色让用户进行更新。我目前继承的应用程序让用户分别进入每个角色,一次添加/删除一个用户。我尝试了许多变体来设置与我的模型的关系,但无济于事,这就是我在这里发布的原因。谢谢
【参考方案1】:
您需要使用for
循环,以便您的表单控件具有正确的名称属性以绑定到您的模型(我会留给您从剃刀转换为 aspx)
@using (Html.BeginForm("UpdateRoles", "UserAdmin", FormMethod.Post))
@Html.HiddenFor(m => m.UserId) // or add this as a route parameter in BeginForm()
...
for(int i = 0; i < Model.UserRoles.Count; i++)
@Html.HiddenFor(m => m.UserRoles[i].RoleId)
@Html.CheckBoxFor(m => m.UserRoles[i].UserisinRole)
@Html.LabelFor(m => m.UserRoles[i].UserisinRole, Model.UserRoles[i].UserRoleName)
<input type="submit" name="Submit" value="Update Roles" />
当您提交表单时,model.UserRoles
将包含所有角色,您可以使用获取所选角色
var selectedRoles = model.UserRoles.Where(r => r.UserisinRole);
旁注:在这里使用<table>
似乎不合适。
【讨论】:
以上是关于MVC 3 从视图、模型中检索复选框值的主要内容,如果未能解决你的问题,请参考以下文章
在 MVC/Razor 中,如何获取多个复选框的值并将它们全部传递给控制器?