如何使用asp.net mvc EditorTemplate

Sha*_*ean 7 asp.net-mvc asp.net-mvc-3

我读了EditorTemplates自动加载,但是从asp.net的MVC 2和3,现在用剃刀,我仍然无法得到这个工作.

我的模型看起来像这样:

public class RoleViewModel
{
    public int RoleId { get; set; }
    public bool InRole { get; set; }
    public string RoleName { get; set; }
}

public class UserViewModel
{
    public User User { get; set; }
    public IEnumerable<RoleViewModel> Roles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的观点如下:

〜/查看/角色/ Edit.cshtml

@model Project.Web.ViewModel.UserViewModel
@using (Html.BeginForm()) {
   @Html.EditorFor(model => model.Roles)
   <!-- Other stuff here -->
}
Run Code Online (Sandbox Code Playgroud)

〜/查看/角色/ EditorTemplates/RoleViewModel.cshtml

@model Project.Web.ViewModel.RoleViewModel
@foreach (var i in Model)
{
    <div>
    @i.RoleName
    @Html.HiddenFor(model => i.RoleId)
    @Html.CheckBoxFor(model => i.InRole)
    </div>
}
Run Code Online (Sandbox Code Playgroud)

如果我从内容转移EditorTemplate到实际的页面,那么它的工作原理,它显示的复选框等,但这个目前的设置,都显示了为角色的数量的计数.

我究竟做错了什么?

Bui*_*ted 5

〜/查看/角色/ EditorTemplates/RoleViewModel.cshtml

@model MvcApplication16.Controllers.RoleViewModel
<div>
    @Model.RoleName
    @Html.HiddenFor(m => m.RoleId)
    @Html.CheckBoxFor(m => m.InRole)
</div>
Run Code Online (Sandbox Code Playgroud)

〜/查看/角色/ Edit.cshtml

@model MvcApplication16.Controllers.UserViewModel
@using (Html.BeginForm()) {
   @Html.EditorFor(m => m.Roles)
   <!-- Other stuff here -->
}
Run Code Online (Sandbox Code Playgroud)

楷模

public class UserViewModel {
    public User User { get; set; }
    public IEnumerable<RoleViewModel> Roles { get; set; }
}

public class RoleViewModel {
    public int RoleId { get; set; }
    public bool InRole { get; set; }
    public string RoleName { get; set; }
}

public class User {
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

调节器

public ActionResult Edit() {
    return View(
        new UserViewModel() {
            User = new User() { Name = "Test" },
            Roles = new List<RoleViewModel>() { 
                new RoleViewModel() { 
                    RoleId = 1, 
                    InRole = true, 
                    RoleName = "Test Role" }}
        });
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作得很好.与你的比较,看看你有没有看到任何问题:)