- Создадим пустой 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(); } } }