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


начало работы с entity Framework 4.0 Database First и ASP.NET 4 веб-формы — часть 8

Том Дайкстра (Tom Dykstra)

Пример веб-приложения Университета Contoso демонстрирует создание ASP.NET Web Forms приложений с помощью Entity Framework 4.0 и Visual Studio 2010. Сведения о серии учебников см. в первом руководстве этой серии.

Использование функциональных возможностей динамических данных для форматирования и проверки данных

В предыдущем руководстве вы реализовали хранимые процедуры. В этом руководстве показано, как функциональные возможности динамических данных могут обеспечить следующие преимущества:

  • Поля автоматически форматируются для отображения на основе их типа данных.
  • Поля проверяются автоматически на основе их типа данных.
  • Вы можете добавить метаданные в модель данных, чтобы настроить форматирование и поведение проверки. После этого можно добавить правила форматирования и проверки только в одном месте, и они автоматически применяются везде, где вы обращаетесь к полям с помощью элементов управления динамическими данными.

Чтобы увидеть, как это работает, измените элементы управления, используемые для отображения и изменения полей на существующей странице Students.aspx , а также добавите метаданные форматирования и проверки в поля имени и даты типа сущности Student .

Изображение01

Использование элементов управления DynamicField и DynamicControl

Откройте страницу Students.aspx и в элементе StudentsGridView управления замените элементы Name и Enrollment DateTemplateField следующей разметкой:

<asp:TemplateField HeaderText="Name" SortExpression="LastName">
                <EditItemTemplate>
                    <asp:DynamicControl ID="LastNameTextBox" runat="server" DataField="LastName" Mode="Edit" />
                    <asp:DynamicControl ID="FirstNameTextBox" runat="server" DataField="FirstMidName" Mode="Edit" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:DynamicControl ID="LastNameLabel" runat="server" DataField="LastName" Mode="ReadOnly" />,
                    <asp:DynamicControl ID="FirstNameLabel" runat="server" DataField="FirstMidName" Mode="ReadOnly" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:DynamicField DataField="EnrollmentDate" HeaderText="Enrollment Date" SortExpression="EnrollmentDate" />

Эта разметка использует DynamicControl элементы управления вместо TextBox элементов управления и Label в поле шаблона имени учащегося, а также DynamicField элемент управления для даты регистрации. Строки формата не указаны.

ValidationSummary Добавьте элемент управления после StudentsGridView элемента управления .

<asp:ValidationSummary ID="StudentsValidationSummary" runat="server" ShowSummary="true"
        DisplayMode="BulletList" Style="color: Red" />

В элементе SearchGridView управления замените разметку для столбцов Имя и Дата регистрации , как это было в элементе StudentsGridViewEditItemTemplate управления , за исключением того, чтобы опустить элемент . Элемент ColumnsSearchGridView элемента управления теперь содержит следующую разметку:

<asp:TemplateField HeaderText="Name" SortExpression="LastName">
                <ItemTemplate>
                    <asp:DynamicControl ID="LastNameLabel" runat="server" DataField="LastName" Mode="ReadOnly" />,
                    <asp:DynamicControl ID="FirstNameLabel" runat="server" DataField="FirstMidName" Mode="ReadOnly" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:DynamicField DataField="EnrollmentDate" HeaderText="Enrollment Date" SortExpression="EnrollmentDate" />

Откройте файл Students.aspx.cs и добавьте следующий using оператор:

using ContosoUniversity.DAL;

Добавьте обработчик для события страницы Init :

protected void Page_Init(object sender, EventArgs e)
{
    StudentsGridView.EnableDynamicData(typeof(Student));
    SearchGridView.EnableDynamicData(typeof(Student));
}

Этот код указывает, что динамические данные будут обеспечивать форматирование и проверку в этих элементах управления с привязкой к данным для полей сущности Student . Если при запуске страницы появляется сообщение об ошибке, как показано в следующем примере, обычно это означает, что вы забыли EnableDynamicData вызвать метод в Page_Init:

Could not determine a MetaTable. A MetaTable could not be determined for the data source 'StudentsEntityDataSource' and one could not be inferred from the request URL.

Запустите страницу.

Изображение03

В столбце Дата регистрации отображается время вместе с датой, так как свойство имеет DateTimeтип . Вы исправите это позже.

Сейчас обратите внимание, что динамические данные автоматически обеспечивают базовую проверку данных. Например, щелкните Изменить, очистите поле даты, нажмите кнопку Обновить, и вы увидите, что динамические данные автоматически делают это поле обязательным, так как в модели данных значение не допускает значения NULL. На странице отображается звездочка после поля и сообщение об ошибке в элементе ValidationSummary управления :

Image05

Элемент управления можно опустить ValidationSummary , так как можно также навести указатель мыши на звездочку, чтобы увидеть сообщение об ошибке:

Image06

Динамические данные также проверят, что данные, введенные в поле Дата регистрации , являются допустимой датой:

Изображение04

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

Добавление метаданных в модель данных

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

В Обозреватель решений щелкните правой кнопкой мыши проект ContosoUniversity, выберите Добавить ссылку и добавьте ссылку на System.ComponentModel.DataAnnotations.

Изображение11

В папке DAL создайте файл класса, назовите его Student.cs и замените код шаблона следующим кодом.

using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace ContosoUniversity.DAL
{
    [MetadataType(typeof(StudentMetadata))]
    public partial class Student
    {
    }

    public class StudentMetadata
    {
        [DisplayFormat(DataFormatString="{0:d}", ApplyFormatInEditMode=true)]
        public DateTime EnrollmentDate { get; set; }

        [StringLength(25, ErrorMessage = "First name must be 25 characters or less in length.")]
        [Required(ErrorMessage="First name is required.")]
        public String FirstMidName { get; set; }

        [StringLength(25, ErrorMessage = "Last name must be 25 characters or less in length.")]
        [Required(ErrorMessage = "Last name is required.")]
        public String LastName { get; set; }
    }
}

Этот код создает разделяемый класс для сущности Student . Атрибут, применяемый MetadataType к этому разделяемым классу, определяет класс, который используется для указания метаданных. Класс метаданных может иметь любое имя, но обычно используется имя сущности и "Метаданные".

Атрибуты, применяемые к свойствам в классе метаданных, определяют форматирование, проверку, правила и сообщения об ошибках. Приведенные здесь атрибуты будут иметь следующие результаты:

  • EnrollmentDate будет отображаться в виде даты (без времени).
  • Оба поля имени должны содержать не более 25 символов, и будет предоставлено пользовательское сообщение об ошибке.
  • Оба поля имени являются обязательными, и предоставляется пользовательское сообщение об ошибке.

Запустите страницу Students.aspx еще раз, и вы увидите, что даты теперь отображаются без времени:

Image08

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

Изображение10

Попробуйте ввести имена длиной более 25 символов, нажмите кнопку Обновить, и на странице отобразится указанный текст сообщения об ошибке.

Image09

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

Дополнительные сведения

На этом мы завершаем серию учебников по начало работы с entity Framework. Дополнительные ресурсы, которые помогут вам узнать, как использовать Entity Framework, см. в первом руководстве из следующей серии руководств по Entity Framework или посетите следующие сайты: