我正在上课如下
public class UserRoleModel
{
public string Role { get; set; }
public bool UserRole { get; set; }
}
and public UserRoleModel[] UserRoles { get; set; }
我的控制器如下:
public ActionResult CreateUser()
{
UserDetailsModel model = new UserDetailsModel();
return View(model);
}
[HttpPost]
public ActionResult CreateUser(UserDetailsModel model)
{
return View(model);
}
在我看来我有
>@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>
}
尽管在我的视图中相应地显示了值,但 UserRoles 没有模型绑定回。我错过了什么或者有什么更好、更干净的方法吗?
这些事情可以通过编辑器模板很好地实现。它们还可以避免您在视图中编写意大利面条式代码。例子:
Model:
public class UserDetailsModel
{
public IEnumerable<UserRoleModel> Roles { get; set; }
}
public class UserRoleModel
{
public string Role { get; set; }
public bool UserRole { get; set; }
}
控制器:
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);
}
}
View (~/Views/Home/Index.cshtml
):
@model AppName.Models.UserDetailsModel
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.Roles)
<input type="submit" value="OK" />
}
编辑器模板(~/Views/Home/EditorTemplates/UserRoleModel.cshtml
):
@model AppName.Models.UserRoleModel
@Html.CheckBoxFor(x => x.UserRole)
@Html.LabelFor(x => x.Role, Model.Role)
@Html.HiddenFor(x => x.Role)
这就是我所说的干净的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)