ASP.NET MVC 4

ASP.NET MVC 4

Адам Фриман

Создание проекта для примера

Прежде чем начать, мы создадим простое приложение MVC, к которому будем применять различные техники валидации моделей. Мы создали новый проект MVC под названием ModelValidation на шаблоне Basic, а также новый класс модели под названием Appointment.cs, который показан в листинге 23-1.

Листинг 23-1: Класс модели Appointment
using System;
using System.ComponentModel.DataAnnotations;
namespace ModelValidation.Models
{
	public class Appointment
	{
		public string ClientName { get; set; }
		[DataType(DataType.Date)]
		public DateTime Date { get; set; }
		public bool TermsAccepted { get; set; }
	}
}

В классе модели Appointment мы определили три свойства и указали с помощью атрибута DataType, что свойство Date должно быть выражено в формате даты без компонента времени.

Для этого примера мы также создали контроллер Home и определили методы действий, которые работают с классом модели Appointment, как показано в листинге 23-2.

Листинг 23-2: Контроллер Home в проекте ModelValidation
using System;
using System.Web.Mvc;
using ModelValidation.Models;

namespace ModelValidation.Controllers
{
	public class HomeController : Controller
	{
		public ViewResult MakeBooking()
		{
			return View(new Appointment {Date = DateTime.Now});
		}

		[HttpPost]
		public ViewResult MakeBooking(Appointment appt)
		{
			// statements to store new Appointment in a
			// repository would go here in a real project
			return View("Completed", appt);
		}
	}
}

Как и в предыдущих главах, мы определили две версии метода действия MakeBooking. В этой главе нас интересует версия с атрибутом HttpPost, так как именно в ней будет применяться связывание данных для создания объекта параметра Appointment.

Обратите внимание, что в реальном приложении мы указали бы в комментариях, где находятся операторы для сохранения информации об объекте Appointment, который будет создан механизмом связывания. В этом примере мы не собираемся создавать хранилище, потому что хотим сосредоточиться на процессах связывания данных и валидации. Однако, важно помнить, что цель валидации модели - предотвратить сохранение в хранилище нежелательных или бессмысленных данных и возникновение проблем (при попытке их сохранения или, в дальнейшем, обработки).

Чтобы завершить наш пример приложения, создадим пару представлений для работы с методами действий в папке /Views/Home. В листинге 23-3 показано содержимое файла MakeBooking.cshtml, который содержит форму для создания новой записи на прием.

Листинг 23-3: Содержимое файла MakeBooking.cshtml
@model ModelValidation.Models.Appointment
				 
@{
	ViewBag.Title = "Make A Booking";
}

<h4>Book an Appointment</h4>

@using (Html.BeginForm())
{
	<p>Your name: @Html.EditorFor(m => m.ClientName)</p>
	<p>Appointment Date: @Html.EditorFor(m => m.Date)</p>
	<p>@Html.EditorFor(m => m.TermsAccepted) I accept the terms & conditions</p>
	<input type="submit" value="Make Booking" />
}

Когда форма будет отправлена обратно к приложению, метод действия MakeBooking отобразит подробную информацию о созданной пользователем записи с помощью представления Completed.cshtml, которое показано в листинге 23-4.

Листинг 23-4: Содержимое файла Completed.cshtml
@model ModelValidation.Models.Appointment

@{
	ViewBag.Title = "Completed";
}

<h4>Your appointment is confirmed</h4>
<p>Your name is: <b>@Html.DisplayFor(m => m.ClientName)</b></p>
<p>The date of your appointment is: <b>@Html.DisplayFor(m => m.Date)</b></p>

Как вы уже поняли, наш пример для этой главы основан на создании записей на прием. Чтобы увидеть, как это работает, запустите приложение и перейдите по ссылке Home/MakeBooking. Введите реквизиты в форму и нажмите кнопку Submit, чтобы отправить данные на сервер; он выполнит связывание данных и создаст объект Appointment, информация о котором затем будет отображена в представлении Completed.cshtml, как показано на рисунке 23 -1.

Рисунок 23-1: Используем пример приложения

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

  • Пользователь должен указать имя.
  • Пользователь должен указать дату (в формате mm/dd/yyyy), которая относится к будущему.
  • Пользователь должен отметить чекбокс, чтобы принять условия пользовательского соглашения.

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

или RSS канал: Что новенького на smarly.net