Поделиться через


Добавление столбца в модель

Скотт Хансельман (Scott Hanselman)

В этом руководстве для начинающих рассматриваются основы ASP.NET MVC. Вы создадите простое веб-приложение, которое считывает и записывает данные из базы данных. Посетите центр обучения ASP.NET MVC , чтобы найти другие ASP.NET учебники и примеры MVC.

В этом разделе мы рассмотрим, как вносить изменения в схему базы данных и обрабатывать изменения в приложении.

Давайте добавим столбец "Оценка" в таблицу Movie. Назад в интегрированную среду разработки и щелкните Обозреватель База данных. Щелкните правой кнопкой мыши таблицу Movie и выберите Открыть определение таблицы.

Добавьте столбец "Оценка", как показано ниже. Так как у нас нет оценок, столбец может разрешать значения NULL. Нажмите кнопку «Сохранить».

Изменение таблицы

Затем вернитесь к Обозреватель решений и откройте файл Movies.edmx (который находится в папке \Models). Щелкните правой кнопкой мыши область конструктора (белую область) и выберите Обновить модель из базы данных.

Фильмы — Microsoft Visual Web Developer 2010 Express (11)

Откроется мастер обновления. Перейдите на вкладку Обновить и нажмите кнопку Готово. Затем класс модели Movie будет обновлен с помощью нового столбца.

Мастер обновления (2)

После нажатия кнопки Готово вы увидите, что новый столбец рейтинга добавлен в сущность Movie в нашей модели.

Сущность Movie

Мы добавили столбец в модель базы данных, но представления не знают об этом.

Обновление представлений с помощью изменений модели

Существует несколько способов обновления шаблонов представлений для отражения нового столбца Оценка. Так как мы создали эти представления, создав их с помощью диалогового окна Добавление представления, мы могли бы удалить их и повторно создать. Однако обычно пользователи уже внесли изменения в свои шаблоны представления из первоначального формирования шаблонов и хотят добавить или удалить поля вручную, как это было с полем идентификатора для создания.

Откройте шаблон \Views\Movies\Index.aspx и добавьте <th>Rating</th> в начало таблицы Movie. Я добавил свой после жанра. Затем в той же позиции столбца, но ниже вниз, добавьте строку, чтобы вывести нашу новую оценку.

<td>
  <%: item.Rating %>
</td>

Наш окончательный шаблон Index.aspx будет выглядеть следующим образом:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Movies.Models.Movie>>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Movie List
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>My Movie List</h2>
    <table>
        <tr>
            <th>Id</th>
            <th>Title</th>
            <th>ReleaseDate</th>
            <th>Genre</th>
            <th>Rating</th>
            <th>Price</th>
        </tr>
        <% foreach (var item in Model)
           { %>
        <tr>
            <td><%: item.Id %></td>
            <td><%: item.Title %></td>
            <td><%: String.Format("{0:g}", item.ReleaseDate) %></td>
            <td><%: item.Genre %></td>
            <td><%: item.Rating %></td>
            <td><%: String.Format("{0:F}", item.Price) %></td>
        </tr>
        <% } %>
    </table>
    <p>
        <%: Html.ActionLink("Create New", "Create") %>
    </p>
</asp:Content>

Затем давайте откроем шаблон \Views\Movies\Create.aspx и добавим метку и текстовое поле для нашего нового свойства Rating:

<div class="editor-label">
    <%: Html.LabelFor(model => model.Rating) %>
</div>
<div class="editor-field">
    <%: Html.TextBoxFor(model => model.Rating)%>
    <%: Html.ValidationMessageFor(model => model.Rating)%>
</div>

Наш окончательный шаблон Create.aspx будет выглядеть следующим образом, и давайте изменим заголовок браузера и дополнительное <название h2> на что-то вроде "Создать фильм", пока мы здесь!

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Movies.Models.Movie>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Create a Movie
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
    <script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
    <h2>Create a Movie</h2>
    <% Html.EnableClientValidation(); %>
    <% using (Html.BeginForm()) {%>
        <%: Html.ValidationSummary(true) %>

        <fieldset>
            <legend>Fields</legend>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Title) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Title) %>
                <%: Html.ValidationMessageFor(model => model.Title) %>
            </div>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.ReleaseDate) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.ReleaseDate) %>
                <%: Html.ValidationMessageFor(model => model.ReleaseDate) %>
            </div>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Genre) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Genre) %>
                <%: Html.ValidationMessageFor(model => model.Genre) %>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.Rating) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Rating)%>
                <%: Html.ValidationMessageFor(model => model.Rating)%>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.Price) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Price) %>
                <%: Html.ValidationMessageFor(model => model.Price) %>
            </div>
           
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% } %>

    <div>
        <%: Html.ActionLink("Back to List", "Index") %>
    </div>

</asp:Content>

Запустите приложение, и теперь у вас есть новое поле в базе данных, которое было добавлено на страницу Создание. Добавьте новый фильм (на этот раз с рейтингом) и нажмите кнопку Создать.

Создание фильма — Интернет-Обозреватель Windows

После нажатия кнопки Создать вы перейдете на страницу Индекс, где будет отображаться новый фильм с новым столбцом оценки в базе данных.

Список фильмов — Windows Internet Обозреватель (12)

В этом базовом руководстве вы начали создавать контроллеры, связывать их с представлениями и передавать жестко закодированные данные. Затем мы создали и разработали базу данных и поместили в нее некоторые данные. Мы извлекли данные из базы данных и отображали их в таблице HTML. Затем мы добавили форму создания, которая позволяет пользователю самостоятельно добавлять данные в базу данных из веб-приложения. Мы добавили проверку, а затем сделали проверку с использованием JavaScript на стороне клиента. Наконец, мы изменили базу данных, включив новый столбец данных, а затем обновили две страницы, чтобы создать и отобразить эти новые данные.

Теперь я призываю вас перейти к нашему учебнику промежуточного уровня "MVC Music Store", а также к множеству видео и ресурсов на сайте https://asp.net/mvc , чтобы узнать еще больше о ASP.NET MVC!

Желаем удачи!