Главная страница   /   5.3. Более сложные модели для представления и ввода (ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

Джеффри Палермо

5.3. Более сложные модели для представления и ввода

На рисунке 5-3 показана таблица, которая содержит список клиентов и краткую информацию о них, а также элемент ввода для каждой строки. Конечные пользователи могут просмотреть список клиентов, а также изменить статус клиента, установив флажок, если пользователь должен быть активирован.

Рисунок 5-3: Комбинированная форма представления и ввода

В этом разделе мы построим модель представления используемую для отображения пользовательского интерфейса и модель ввода представляющую данные, которые пользователь отправит назад серверу.

Проектирование комбинированной модели представления и пользовательского ввода

Хотя мы это уже знаем, но это является достаточно важным моментом чтобы повторить, модель представления служит для отображение данных на экране, а модель ввода представляет пользовательские данные. Они обе просты настолько, насколько это возможно, и отражают C# свойства на пользовательском интерфейсе. Листинг 5-7 содержит код для модели, которая представляет таблицу на рисунке 5-3.

Листинг 5-7: Комбинированная модель представления и пользовательского ввода
public class CustomerSummary
{
	public string Name { get; set; }
	public string ServiceLevel { get; set; }
	public string OrderCount { get; set; }
	public string MostRecentOrderDate { get; set; }
	public CustomerSummaryInput Input { get; set; }
	public class CustomerSummaryInput
	{
		public int Number { get; set; }
		public bool Active { get; set; }
	}
}

Строка 7: Свойство модели ввода

Строки 8-12: Создание класса для модели ввода

Имеет смысл создавать модель ввода в виде вложенного класса (строки 8-12). В конце концов, в пользовательском интерфейсе элементы ввода являются вложенными. Свойство Input является моделью ввода для каждого элемента (строка 7). Если оно является частью модели представления, ее легко поддерживать: будет только один класс, который представляет текущий экран.

Обратите внимание на свойство Number в CustomerSummaryInput - это идентификационный номер каждого клиента, который существует, чтобы различать входные данные. Ведь мы не хотим, чтобы наше приложение активировало Сьюзан Пауэр, когда пользователь хочет активизировать Джима До. На этом интерфейсе важно, чтобы приложению была обеспечена логическая связь с конкретным клиентом.

Работа с моделью ввода

Связывание данных работает точно так же. Необходимо уточнять в параметрах метода, какие модели мы связываем. Эта процедура немного отличается, потому что мы редактируем множество записей:

public ViewResult Save (List<CustomerSummary.CustomerSummaryInput> input)
{
	return View(input);
}

Мы указываем связыванию данных модели собрать все входящие данные в качестве List<CustomerSummary.CustomerSummaryInput>. Такая реализация выполняется по умолчанию.