- Создадим пустой MVC проект.
 - Создадим HOME контроллер.
 - Создадим модель для профиля 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; }
   
 }
- Создадим представление для профиля на базе класса Profile.
 - Создадим Index представление
 - @Html.ActionLink(«Редактировать профиль», «Profile») добавим ссылку на профиль
 - Создадим форму для профиля.
 - Загрузим бутстрап.
 - В профиле будет использоваться динамический список городов выводимый из базы данных.
 - Нам необходимо создать таблицу в которой будем хранить список городов.
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 ('Актау'), ('Актобе'), ('Алматы'), ('Астана'), ('Атырау'), ('Байконур'), ('Балхаш'), ('Караганда'), ('Кустанай'), ('Павлодар'), ('Семей'), ('Уральск'), ('УстьКаменогорск'), ('Шымкент'); - Создаем новый проект в SQL в который добавляем скрипты по аналогии как мы делали на прошлом уроке.
 - Создаем модель Добавить->Создать Элемент->ADO.NET EDM
 - Добавить контроллер. Создать шаблонный элемент Entity Framework
 - Создаем контроллер для таблицы City
 - Изменим 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(); }Добавим город «выберите город» по умолчанию.
 - Установим валидацию с помощью jquery для форм. В уроке 1 мы изучали как использовать консоль NUGET
Install-Package jQuery.Validation
Install-Package jQuery.Validation.Unobtrusive - Пропишем обязательные поля для формы. Смотрите пример из урока 1
 - Подключим скрипты для валидации.
<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> - Добавим HTML helper для вывода данных о валидации формы.
@Html.ValidationMessageFor(x => x.Name) - В модели профиля подключим using System.ComponentModel.DataAnnotations;
 - Зададим ограничения
[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();
        }
        
    }
}
