Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab4.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
354 Кб
Скачать
☆

3.9 Добавление новой записи в таблицу GuestBook из веб-приложения

Чтобы можно было добавлять новые записи в таблицу GuestBook, необходимо:

  1. добавить метод в класс RecordsDAO, который будет добавлять запись в БД;

  2. добавить 2 метода Create() в Home-контроллер;

  3. добавить 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-представление

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]