asp.net-mvc
Шаблоны отображения и редактора
Поиск…
Вступление
При работе с объектами в приложении MVC, если какой-либо объект должен отображаться в нескольких местах с одинаковым форматом, нам нужен какой-то стандартизованный макет. ASP.NET MVC упростил такую стандартизацию с учетом шаблонов отображения и редактора. Короче говоря, шаблоны отображения и редактора используются для стандартизации макета, отображаемого пользователю при редактировании или отображении определенных типов или классов.
Шаблон отображения
Модель:
public class User
{
public int ID { get; set; }
public string FirstName { get; set; }
public DateTime DateOfBirth { get; set; }
}
Если мы хотим отображать пользователей в разных представлениях, было бы лучше создать стандартизованный макет для этих пользователей, где бы они ни отображались. Мы можем это сделать, используя шаблоны дисплеев.
Шаблон отображения - это просто частичное представление, привязанное к модели, к объекту, который он хочет отобразить, и существует в папке Views/Shared/DisplayTemplates
(хотя вы также можете поместить его в Views/ControllerName/DisplayTemplates
). Кроме того, имя представления (по умолчанию) должно быть именем объекта, который вы хотите использовать в качестве шаблона .
Views / Shared / DisplayTemplates / User.cshtml
@model TemplatesDemo.Models.User
<div style="padding-bottom: 10px">
<p><strong>ID:</strong> @Html.DisplayFor(m => m.ID)</p>
<p><strong>Name:</strong> @Html.DisplayFor(m => m.FirstName)</p>
<p><strong>Date of Birth:</strong> @Html.DisplayFor(m => m.DateOfBirth)</p>
</div>
<hr/>
Теперь, если мы хотим отобразить всех пользователей из базы данных и показать их в разных представлениях, мы можем просто отправить список пользователей в представление и использовать экран отображения, чтобы показать их. Мы можем использовать один из двух способов:
Html.DisplayFor()
Html.DisplayForModel()
DisplayFor
вызывается шаблон отображения для выбранного типа свойства (например, Html.DisplayFor(x => x.PropertyName)
. DisplayForModel
вызывает шаблон отображения для @model
представления
Посмотреть
@model IEnumerable<TemplatesDemo.Models.User>
@{
ViewBag.Title = "Users";
}
<h2>Users</h2>
@Html.DisplayForModel()
Шаблон редактора
Шаблоны отображения могут использоваться для стандартизации макета объекта, поэтому давайте посмотрим, как мы можем сделать то же самое для этих объектов при их редактировании. Подобно шаблонам отображения, существует два способа вызова шаблонов редактора для заданного типа:
Html.EditorFor()
Html.EditorForModel()
Шаблоны редакторов, так же как и шаблоны отображения, должны существовать как в представлениях / общих / EditorTemplates, так и в Views / ControllerName / EditorTemplates . Для этой демонстрации мы создадим их в общей папке. Опять же, имя представления (по умолчанию) должно быть именем объекта, который вы хотите использовать в качестве шаблона.
модель
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
public Roles Roles { get; set; }
public int RoleId { get; set; }
}
public class Roles
{
public int Id { get; set; }
public string Role { get; set; }
}
Скажем, мы хотим иметь возможность редактировать любого пользователя из базы данных в нескольких представлениях. Для этой цели мы будем использовать ViewModel .
ViewModel
public class UserEditorViewModel
{
public User User { get; set; }
public IEnumerable<Roles> Roles { get; set; }
}
Используя этот ViewModel , мы создадим шаблон редактора
Views / Shared / EditorTemplates / UserEditorViewModel.cshtml
@model TemplatesDemo.Models.UserEditorViewModel
<div class="form-group">
@Html.DisplayNameFor(m => m.User.Id)
@Html.EditorFor(m => m.User.Id)
</div>
<div class="form-group">
@Html.DisplayNameFor(m => m.User.Name)
@Html.EditorFor(m => m.User.Name)
</div>
<div class="form-group">
@Html.DisplayNameFor(m => m.User.DateOfBirth)
@Html.EditorFor(m => m.User.DateOfBirth)
</div>
<div class="form-group">
@Html.DisplayNameFor(m => m.User.Roles.Role)
@Html.DropDownListFor(m => m.User.RoleId, new SelectList(Model.Roles,"Id","Role"))
</div>
Мы получим желаемого пользователя и список доступных ролей и привяжем их в viewModel UserEditorViewModel в действии контроллера и отправим viewModel в представление. Для простоты я запускаю viewModel из Action
действие
public ActionResult Editor()
{
var viewModel = new UserEditorViewModel
{
User = new User
{
Id = 1,
Name = "Robert",
DateOfBirth = DateTime.Now,
RoleId = 1
},
Roles = new List<Roles>()
{
new Roles
{
Id = 1,
Role = "Admin"
},
new Roles
{
Id = 2,
Role = "Manager"
},
new Roles
{
Id = 3,
Role = "User"
}
}
};
return View(viewModel);
}
Мы можем использовать созданный Шаблон Редактора в любом представлении, которое мы желаем
Посмотреть
@model TemplatesDemo.Models.UserEditorViewModel
@using (Html.BeginForm("--Your Action--", "--Your Controller--"))
{
@Html.EditorForModel()
<input type="submit" value="Save" />
}