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