- •1. Цель работы
- •2. Общие сведения
- •Жизненный цикл запроса.
- •Работа с веб-формами
- •3.4 Создание модели данных
- •2.2. Необходимый инструментарий
- •3. Ход работы
- •3.1. Создание шаблона mvc
- •3.2 Удаление из шаблона примеров кода
- •3.3 Создание (подключение) бд
- •3.5 Реализация шаблона проектирования Data Access Object
- •3.6 Создание контроллера
- •3.7 Сборка проекта
- •3.8 Создание представлений
- •3.9 Добавление новой записи в таблицу GuestBook из веб-приложения
- •4. Задание для самостоятельного выполнения
- •5. Подводя итоги
- •6. Вопросы для самопроверки
3.9 Добавление новой записи в таблицу GuestBook из веб-приложения
Чтобы можно было добавлять новые записи в таблицу GuestBook, необходимо:
добавить метод в класс RecordsDAO, который будет добавлять запись в БД;
добавить 2 метода Create() в Home-контроллер;
добавить Create-представление.
Добавим в класс RecordsDAO следующий метод, который будет добавлять новую запись в таблицу GuestBook:
Листинг 7 – Добавление метода в DAO\RecordsDAO.cs
public bool AddRecord(Records records)
{
bool result = true;
Connect();
try
{
SqlCommand cmd = new SqlCommand(
"INSERT INTO GuestBook (Title, Author, PublicationDate) " +
"VALUES (@Title, @Author, @Date)", Connection);
cmd.Parameters.Add(new SqlParameter("@Title", records.Title));
cmd.Parameters.Add(new SqlParameter("@Author", records.Author));
cmd.Parameters.Add(new SqlParameter("@Date", records.PublicationDate));
cmd.ExecuteNonQuery();
}
catch (Exception)
{
result = false;
}
finally
{
Disconnect();
}
return result;
}
Если страница, которую мы создаем, содержит веб-форму, то в контроллере обязательно будет 2 метода. Первый будет срабатывать при простом обращении к странице (так называемый GET-запрос) через URL. Он будет просто возвращать представление, которое содержит веб-форму. Второй, помеченный атрибутом [AcceptVerbs(HttpVerbs.Post)], будет срабатывать при POST-запросе к странице, при котором будет происходить передача данных с формы на сервер. Через него и будет добавляться новый контакт в базу данных.
Обратите внимание на атрибут [Bind(Exclude = "Id")]– он исключает из принимаемых от клиента данных Id элемента. Дело в том, что Id является в таблице GuestBook первичным ключем, и в тоже время автоинкеременом. Чтобы программа потенциально не могла принять от пользователя данное поле (оно
проставляется автоматически внутри СУБД), оно с помощью данного атрибута исключается из принимаемого объекта.
Листинг 8 – Добавление методов в Controllers\HomeController.cs
//
// GET: /Home/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Home/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude = "ID")] Records records)
{
try
{
if (recordsDAO.AddRecord(records))
return RedirectToAction("Index");
else
return View("Create");
}
catch
{
return View("Create");
}
}
Теперь добавим представление. Для этого нажмем правой кнопкой мыши на любом из методов Create()
и выберем Add View… В диалоге Add View нажимаем Create a strongly-typed view. Выберем класс для представления mvcApplication.Models.Records и View content типа Create. После нажатия кнопки Add получим файл следующего содержания:
Листинг 9 – Views\Home\Create.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<mvcApplication.Models.Records>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Create</h2>
<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<p>
<label for="Title">Title:</label>
<%= Html.TextBox("Title") %>
<%= Html.ValidationMessage("Title", "*") %>
</p>
<p>
<label for="Author">Author:</label>
<%= Html.TextBox("Author") %>
<%= Html.ValidationMessage("Author", "*") %>
</p>
<p>
<label for="PublicationDate">PublicationDate:</label>
<%= Html.TextBox("PublicationDate") %>
<%= Html.ValidationMessage("PublicationDate", "*") %>
</p>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
<div>
<%=Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
ВАЖНО! В Create и Edit представлении нужно обязательно удалять следующие строки, т.к. если произойдет попытка вставки в поле с типом identity (автоинкремент), то произойдет ошибка (Листинг 10) :
Листинг 10 – Удаление лишних полей из представления Views\Home\Create.aspx
<p>
<label for="ID">ID:</label>
<%= Html.TextBox("ID") %>
<%= Html.ValidationMessage("ID", "*") %>
</p>
Теперь нужно запустить проект. В результате получим следующую страницу, через которую можно добавлять записи в таблицу GuestBook (Рисунок 9):
Рисунок 9 – Create-представление
