JQueryval. Валидация данных в проекте MVC используя JQuery. ASP.NET MVC Урок 4

Автор: | 19.02.2017
  1. Создадим пустой MVC проект.
  2. Создадим HOME контроллер.
  3.  Создадим модель для профиля model.cs.
public class Profile
 {
     public string Name { get; set; }
     public string patronymic { get; set; }
     public string Surname { get; set; }
     public DateTime DOB { get; set; }
     public string Photo { get; set; }
     public string Gender { get; set; }
     public string City { get; set; }
   

 }
  1.  Создадим представление для профиля на базе класса Profile.
  2. Создадим Index представление
  3. @Html.ActionLink(«Редактировать профиль», «Profile») добавим ссылку на профиль
  4. Создадим форму для профиля.
  5. Загрузим бутстрап.
  6. В профиле будет использоваться динамический список городов выводимый из базы данных.
  7. Нам необходимо создать таблицу в которой будем хранить список городов.
    CREATE TABLE [dbo].[City]
    (
      [Id] INT IDENTITY(1,1) NOT NULL  PRIMARY KEY, 
        [City] NVARCHAR(50) NULL
      
    )
    

     

    TRUNCATE TABLE [socialDB].[dbo].[City];
    insert into  [socialDB].[dbo].[City] ([City]) values 
    ('Актау'),
    ('Актобе'),
    ('Алматы'),
    ('Астана'),
    ('Атырау'),
    ('Байконур'),
    ('Балхаш'),
    ('Караганда'),
    ('Кустанай'),
    ('Павлодар'),
    ('Семей'),
    ('Уральск'),
    ('УстьКаменогорск'),
    ('Шымкент');

     

  8. Создаем новый проект в SQL в который добавляем скрипты по аналогии как мы делали на прошлом уроке.
  9. Создаем модель Добавить->Создать Элемент->ADO.NET EDM
  10. Добавить контроллер. Создать шаблонный элемент Entity Framework
  11. Создаем контроллер для таблицы City
  12. Изменим home controler как указано в коде ниже
    using WebApplication19.Models;
    namespace WebApplication19.Controllers
    {
        public class HomeController : Controller
        {
            private socialDBEntities db = new socialDBEntities();
            // GET: Home
            public ActionResult Index()
            {
                return View();
            }
            public ViewResult  myProfile()
            {
                ViewBag.City = db.City.ToList();
                return View();
            }
            
        }
    }

    Обратите внимание на то что мы подключили классы из контроллера

    using WebApplication19.Models;

    Создали объект по работе с базой данных

     private socialDBEntities db = new socialDBEntities();

    поместили во viewbag список городов

    ViewBag.City = db.City.ToList();

    Мы сделали все это используя классы сгенерированные entity framework

    public ViewResult  myProfile()
        {
            
            Value = new City();
            items = db.City.ToList();
              Value.City1 = "выберите город";
             Value.Id = 0;
             
            items.Insert(0, Value);
            ViewBag.City = items;
            Value = null;
            return View();
        }

    Добавим город «выберите город» по умолчанию.

  13. Установим валидацию с помощью jquery для форм. В уроке 1 мы изучали как использовать консоль NUGET
    Install-Package jQuery.Validation 
    Install-Package jQuery.Validation.Unobtrusive
  14. Пропишем обязательные поля для формы. Смотрите пример из урока 1
  15. Подключим скрипты для валидации.
    <script src=»~/Scripts/jquery-1.10.2.min.js»></script>
    <script src=»~/Scripts/bootstrap.js»></script>
    <script src=»~/Scripts/jquery.validate.js»></script>
    <script src=»~/Scripts/jquery.validate.unobtrusive.js»></script>
  16. Добавим HTML helper для вывода данных о валидации формы.
    @Html.ValidationMessageFor(x => x.Name)
  17. В модели профиля подключим using System.ComponentModel.DataAnnotations;
  18. Зададим ограничения
    [Required(ErrorMessage = «Имя обязательный параметр.»)]
    [MaxLength(40, ErrorMessage = «Имя не может быть больше 40 символов.»)]
    [MinLength(4, ErrorMessage = «Имя не может быть меньше 4 символов.»)]
    public string Name { get; set; }

Итоговый код наших файлов.

Модель профиля.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;

namespace WebApplication19.Models
{
    public class Profile
    {
        [Required(ErrorMessage = "Имя обязательный параметр.")]
        [MaxLength(40, ErrorMessage = "Имя не может быть больше 40 символов.")]
        [MinLength(4, ErrorMessage = "Имя не может быть меньше 4 символов.")]
        public string Name { get; set; }
        public string patronymic { get; set; }
        public string Surname { get; set; }
        public DateTime DOB { get; set; }
        public string Photo { get; set; }
        public string Gender { get; set; }


        public int City { get; set; }

        public IEnumerable<WebApplication19.Models.City> Cities { get; set; }
        
    }
    

}

Представление профиля

@model WebApplication19.Models.Profile


@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <link href="~/Content/bootstrap.css" rel="stylesheet" />
    <meta name="viewport" content="width=device-width" />
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/bootstrap.js"></script>
    <script src="~/Scripts/jquery.validate.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
    <title>Profile</title>
</head>
<body>
    <div> 
        <body>
            <div class="panel-success">
                <div class="panel-heading text-center">
                    <h4>Форма Профиля</h4>
                </div>
                <div class="panel-body">
                    @using (Html.BeginForm())
            {
                        @Html.ValidationSummary()
                        <div class="form-group">
                            <label>Ваше имя:</label>
                            @Html.TextBoxFor(x => x.Name, new { @class = "form-control", placeholder = "Введите ваше имя", required = "required" })
                            @Html.ValidationMessageFor(x => x.Name)
                        </div>
                        <div class="form-group">
                            <label>Ваш email:</label>
                            @Html.TextBoxFor(x => x.patronymic, new { @class = "form-control" })
                        </div>
                        <div class="form-group">
                            <label>Ваш телефон:</label>
                            @Html.TextBoxFor(x => x.Surname, new { @class = "form-control" })
                        </div>
                        <div class="form-group">
                            <label>Ваш телефон:</label>
                            @Html.TextBoxFor(x => x.Gender, new { @class = "form-control" })
                        </div>
                        <div class="form-group">
                            <label>Ваш пол</label>
                            @Html.DropDownListFor(x => x.Gender, new[] {
                            new SelectListItem() { Text = "Мужской", Value = Boolean.TrueString},
                            new SelectListItem() { Text = "Женский", Value = Boolean.FalseString}
                        }, "Выберите пол", new { @class = "form-control" })
                        </div>
                        <div class="form-group">
                            <label>Город</label>
                            <div class="editor-field">

                                
                                @Html.DropDownList("accountid", new SelectList(ViewBag.City, "Id", "City1"), new { @class = "form-control" })
                            </div>

                         </div>
                         <div class="text-center">
                                <input type="submit" value="Сохранить" class="btn btn-success" />
                         </div>
                            }
                        </div>
            </div>
        </body>
    </div>
</body>
</html>

Контроллер HomeController

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.Entity;
using WebApplication19.Models;
namespace WebApplication19.Controllers
{
    public class HomeController : Controller
    {
        private socialDBEntities db = new socialDBEntities();
        private List<City> items;

        public City Value { get; private set; }

        // GET: Home
        public ActionResult Index()
        {
            return View();
        }
        public void loadCity()
        {
            Value = new City();
            items = db.City.ToList();
            Value.City1 = "выберите город";
            Value.Id = 0;

            items.Insert(0, Value);
            ViewBag.City = items;
            Value = null;
        }

        [HttpGet]
        public ViewResult myProfile()
        {
            loadCity();
            return View();
        }
        [HttpPost]
        public ViewResult myProfile(Profile profile)
        {

            //if (ModelState.IsValid)
            loadCity();
            return View();
        }
        
    }
}