如果标题不清楚,请道歉。
我正在尝试从ASP.NET MVC中的表单提交返回我的模型。
我的问题与this question几乎相同,唯一不同之处在于我没有List<Model>
,但模型如下:
public Model
{
string UserName {get; set;}
string Password {get; set;}
List<Roles> UserRoles {get; set;}
}
我需要UserRoles作为管理员在创建新用户时可以选择的复选框。我的问题是,我不确定如何对列表使用'@ Html.CheckBoxFor'。我试过这个:
@for (var i = 0; i < Model.UserRoles.Count();i++ )
{
@Html.HiddenFor(model => model.UserRoles[i].RoleID)
@Html.CheckBoxFor(model => model.UserRoles[i].Selected)
@Html.LabelFor(model => model.UserRoles[i].Name)
}
这绝不起作用 - 页面上的每个标签都是“名称”,我的列表在POST中为空。任何人都可以就此提供任何指导吗?
答案 0 :(得分:53)
根本不需要离开Razor。
这对我有用:
for (var i = 0; i < Model.UserRoles.Count(); i++)
{
var role = Model.UserRoles[i];
@Html.HiddenFor(model => model.UserRoles[i].RoleId)
@Html.CheckBoxFor(model => model.UserRoles[i].Selected)
@Html.LabelFor(model=> model.UserRoles[i].Name, role.Name)
}
答案 1 :(得分:10)
请参阅下面的代码,这样您就不需要隐藏角色ID,当您为用户保存所选角色时,也无需遍历所有角色以查看选择了哪个角色。
查看强>
@foreach (Roles info in Model.UserRoles)
{
<span>
<input type="checkbox" class="checkbox" name="selectedRoles" value="@info.RoleName" id="@infoRoleName" />
<label for="@info.RoleName">@info.RoleName</label>
</span>
}
<强>动作强>
[HttpPost]
public ActionResult CreateUsers(Model model, string[] selectedRoles)
{
//
}
答案 2 :(得分:1)
从视图中的代码中,帖子应该可以正常运行,前提是您的帖子操作如下:
[HttpPost]
public ActionResult Action(Model model)
{
return View(model);
}
即。将你的模型作为参数传递。
另外,请确保您在视图中也有模型参考:
@model YourNameSpace.Model
答案 3 :(得分:0)
将复选框列表发布到服务器并获取已检查项目列表
linq左连接以检查是否已选中,生成复选框,已收到已检查列表
查看
List<eDurar.Models.tbl_ISOCetificate> ModList = db.tbl_ISOCetificate.ToList();
var li = (from cert in db.tbl_ISOCetificate join comCert in db.tbl_CompCertificate on cert.Cert_id equals comCert.CompCer_id into jo from b in jo.DefaultIfEmpty()
select new {cert.Cert_id,cert.Cert_Name,chkd = b.CompCer_SerId==null?"":"checked"}).ToList();
foreach (var item in li)
{
@:<div style="width: 30%; display: inline-block; margin: 1em">
@:<input type="checkbox" @item.chkd name="CheckedCertificates" value="@item.Cert_id">
@:<label>@item.Cert_Name</label>
@:</div>
}
控制器
[HttpPost]
public ActionResult ManageSurveyGroup(int[] CheckedCertificates)
{
return View();
}