Validation class для asp net mvc

returnt

13.11.2014

ф1

В данной статье рассмотрим небольшой валидационный класс для asp net mvc. Данный класс позволит проверять вводимые значения пользователем, и проверять наличия их. Мы сможем уведомить пользователя о том, что поле обязательно должно быть заполнено в случае отсутствия значения в нём мы не пропустим пользователя выполнить следующую операцию. Так же сможем проверить введённую пользователем информацию на необходимое количество символов, проверим, достигло вводимое значение минимального порога символов и не превысило ли максимального. В том случае если условия выполняются, мы будем выводить, то или иное уведомление. Алгоритм применим так же и к asp net.

Начнём. После создания проекта mvc

ф1

не зависимо от того какой проект создан пустой или интернет приложение (в примере был создан проект интернет приложение),

ф2

Можно приступить к работе с классом. Его можно загрузить по этой ссылке  Validation class (с раздела для asp net mvc). После того как вы эго скачали, добавим в проект кликнув правой кнопкой по решению выбрав пункт добавить существующий файл и выберем наш класс.

ф3

Теперь сформируем небольшую задачу и попытаемся решить её при помощи Validation class.

Допустим, у нас есть сайт, где есть форма регистрации, она имеет три поля ввода логин и два раза пароль. Первое поле логин не может быть пустым мы провалидируем вводимое значение. Более того данное поле так жене может иметь менее 5 символов, тоже нужно проверить. Обязательно проверим и максимально количество символов, например 10 символов. Таким образом, повторим и с полем паролем. В результате если пользователь введёт не корректные данные, выведем ему соответствующее предупреждение об этом. Подытожим нужно сделать валидационную проверку полей ввода, конечно, это можно было сделать при помощи реализации логики, но представьте, если таких полей ввода примерно 20 штук как будет выглядеть ваш код? Как минимум громоздким во избежание этого его нужно стандартизировать и нормализировать, для этих целей и был разработан данный класс.

Пример программной реализации. Ниже я приведу пример кода View(вида) с наличием трёх полей ввода  <input id=»Text1″ type=»text» и кнопки submit.

 View

  1. @{
  2. Title = «Valid»;
  3. }
  4. <h2>Valid</h2>
  5. @using (Html.BeginForm(«ValidGet», «HomeController»))
  6. {
  7. <input id=»Text1″ type=»text» name=»login» />
  8. <input id=»Text1″ type=»text» name=»pass1″/>
  9. <input id=»Text1″ type=»text» name=»pass2″/>
  10. }
  11. <hr />
  12. @ViewData[«res»]

Разберём код построчно. 1-3 конструкция отвечает за вывод тайтла на вкладке страницы. 4 заголовок на странице. 5-10 форма отвечает за работу глобального метода POST. 7-9 текстовые поля ввода логина пароля. 11. Горизонтальная строка. 12 вместо данной конструкции будет выведено различное уведомление, например о том, что поле не может быть пустым.

Приведу пример кода контроллера

Controllers

  1. using MvcApplication1.Validation;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Web;
  6. using System.Web.Mvc;
  7. namespace MvcApplication1.Controllers
  8. {
  9. public class HomeController : Controller
  10. {
  11. private Validations valid = new Validations();
  12. public ActionResult Index()
  13. {
  14. ViewBag.Message = «Modify this template to jump-start your ASP.NET MVC application.»;
  15. return View();
  16. }
  17. public ActionResult About()
  18. {
  19. ViewBag.Message = «Your app description page.»;
  20. return View();
  21. }
  22. public ActionResult Contact()
  23. {
  24. ViewBag.Message = «Your contact page.»;
  25. return View();
  26. }
  27. public ActionResult Valid()
  28. {
  29. return View(«Valid»);
  30. }
  31. [HttpPost]
  32. public ActionResult ValidGet(String login, String pass1, String pass2)
  33. {
  34. String[] valid_NotEmpty = { login, pass1, pass2 };
  35. String[] valid_lengt = { login, pass1, pass2 };
  36. if (valid.VNotempty(valid_NotEmpty).IndexOf(«Поле») != -1)
  37. {
  38. ViewData[«res»] = «Поле «+ valid.VNotempty(valid_NotEmpty)[1].ToString();
  39. }
  40. else
  41. {
  42. if (valid.VLengt(valid_lengt, 5, 10).IndexOf(«Поле») != -1)
  43. {
  44. ViewData[«res»] = «Поле » + valid.VLengt(valid_lengt, 5, 10)[1].ToString();
  45. }
  46. else
  47. {
  48. ViewData[«res»] = «Всё работает без ошибок!»;
  49. }
  50. }
  51. return View(«Valid»);
  52. }
  53. }
  54. }

За основу я взял контроллер HomeController и добавил в него два екшена: Valid – который отвечает непосредственно за загрузку страницы с полями ввода, и ValidGet – который получит те значения которые пользователь ввёл в поля ввода, и обработается в случае клика кнопки. Как он работает, на вход мы передаём все те переменные, которые получают значения с вида, а именно String login – получит значение логина, что ввёл пользователь, String pass1 – пароль пользователя, и эго проверка на совпадение String pass2. В данном случае мы не рассматриваем форму авторизации, здесь приведён лишь пример ситуации, в которой можно применить данный валидационный класс. Теперь поместим полученные переменные в массив String[] valid_NotEmpty для проверки на наличие введённых значений, и массив String[] valid_lengt для проверки минимального и максимального количества символов. Построим логическую структуру, где проверим, что то значение, которое возвращает наш метод класса валидации valid.VNotempty(valid_NotEmpty).IndexOf(«Поле»)  не равен -1 то отправим предупреждение, что поле пустым быть не может ViewData[«res»] = «Поле «+ valid.VNotempty(valid_NotEmpty)[1].ToString();.

Разберём подробнее: разобём конструкцию по частям valid.VNotempty(valid_NotEmpty).IndexOf(«Поле»)

  1. valid – имя инициализированного валидационного класса
  2. VNotempty() – метод валидационного класса который принимает на вход массив проверяемых значений, и возвращает коллекцию с уже проверенными значениями, заменив пустое значение на слово «пустым быть не может», данное сообщение будет выведено пользователю в вид в переменную ViewData[«res»]. По параметрам конструктора принимает массив проверяемых полей.
  3. IndexOf(«Поле») – метод позволяющий выбрать с возвращённой коллекции индекс элемента со значением «Поле». Если элемент не найден, то вернётся -1 и условие вывода валидацыонного сообщения не выполнится, логика пойдёт дальше.
  4. Попадаем в конструкцию если
  5. valid – имя инициализированного валидационного класса
  6. VLengt() – метод валидационного класса который принимает на вход массив проверяемых значений, и возвращает коллекцию с уже проверенными значениями, заменив значение с недостаточным количеством элементов на сообщение «слишком мало символов» в том случае если мы превысим допустимое количество символов в вид передадим уведомление «слишком много символов». По параметрам конструктора принимает массив проверяемых полей второй параметр минимальное количество символов и третий максимальное количество символов.
  7. IndexOf(«Поле») – метод позволяющий выбрать с возвращённой коллекции индекс элемента со значением «Поле». Если элемент не найден, то вернётся -1 и условие вывода валидацыонного сообщения не выполнится, логика пойдёт дальше.
  8. Если не одно с условий не выполнилось, попадём в последнюю ветку кода, где в вид передадим уведомление «Всё работает без ошибок!».

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

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

Хранилище