我正在上课,如下
@H_502_2@public class UserRoleModel
{
public string Role { get; set; }
public bool UserRole { get; set; }
}
和public UserRoleModel [] UserRoles {get;组; }
我的控制器如下:
@H_502_2@public ActionResult CreateUser() { UserDetailsModel model = new UserDetailsModel(); return View(model); } [HttpPost] public ActionResult CreateUser(UserDetailsModel model) { return View(model); }在我看来我有
@H_502_2@>@foreach (var item in Model.UserRoles) { name = "UserRoles"+ ".Value["+ i + "]"; id= "UserRoles" + "_Value[" + i++ + "]"; selected = item.UserRole ? "checked=\"checked\"" : ""; <p> <input type="checkBox" name="@name" id="@id" @selected value="true" /> <label for="@id">@item.Role</label> <input type="hidden" name="@name" value="false" /> </p> }解决方法
使用编辑器模板很好地实现了这些事情.他们也避免你在你的意见中写意大利面条代码.例:
模型:
@H_502_2@public class UserDetailsModel { public IEnumerable<UserRoleModel> Roles { get; set; } } public class UserRoleModel { public string Role { get; set; } public bool UserRole { get; set; } }控制器:
@H_502_2@public class HomeController : Controller { public ActionResult Index() { return View(new UserDetailsModel { // Fill with some dummy stuff Roles = Enumerable.Range(1,5).Select(x => new UserRoleModel { Role = "role " + x,UserRole = false }) }); } [HttpPost] public ActionResult Index(UserDetailsModel model) { return View(model); } }查看(〜/ Views / Home / Index.cshtml):
@H_502_2@@model AppName.Models.UserDetailsModel @using (Html.BeginForm()) { @Html.EditorFor(x => x.Roles) <input type="submit" value="OK" /> }编辑器模板(〜/ Views / Home / EditorTemplates / UserRoleModel.cshtml):
@H_502_2@@model AppName.Models.UserRoleModel @Html.CheckBoxFor(x => x.UserRole) @Html.LabelFor(x => x.Role,Model.Role) @Html.HiddenFor(x => x.Role)现在这就是我所说的干净的东西.