Как использовать asp.net mvc EditorTemplate

Я читал, что 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; }
}
</roleviewmodel>

Мой вид выглядит следующим образом:

~/Views/Роли/Edit.cshtml

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

~/Views/Роли/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>
}

Если я перемещаю содержимое с EditorTemplate на фактическую страницу, то он работает, он показывает флажок и т.д. Но с этой текущей настройкой все, что отображается, - это количество числа ролей.

Что я делаю неправильно?

1 ответ

~/Просмотров/Роли/EditorTemplates/RoleViewModel.cshtml

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

~/Просмотров/Роли/Edit.cshtml

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

Модели

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; }
}
</roleviewmodel>

контроллер

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" }}
 });
}
</roleviewmodel>

Вышеприведенный код работает отлично. Сравните это с вашим и посмотрите, не видите ли что-нибудь не так:)

licensed under cc by-sa 3.0 with attribution.