Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пример веб-приложения Contoso University наглядно показывает, как создавать приложения ASP.NET Web Forms с помощью Entity Framework 4.0 и Visual Studio 2010. Для информации о серии учебных руководств см. первый учебник этой серии
Использование функции динамических данных для форматирования и проверки данных
В предыдущем руководстве вы реализовали хранимые процедуры. В этом руководстве показано, как функциональность динамических данных может обеспечить следующие преимущества:
- Поля автоматически форматируются для отображения на основе их типа данных.
- Поля автоматически проверяются на основе их типа данных.
- Вы можете добавить метаданные в модель данных для настройки поведения форматирования и проверки. При этом можно добавить правила форматирования и проверки только в одном месте, и они автоматически применяются везде, где вы обращаетесь к полям с помощью элементов управления динамическими данными.
Чтобы узнать, как это работает, вы измените элементы управления, используемые для отображения и изменения полей на существующей странице Students.aspx , и вы добавите метаданные форматирования и проверки в поля Student имени и даты типа сущности.
Использование элементов управления DynamicField и DynamicControl
Откройте страницу Students.aspx и в элементе управления StudentsGridView замените элементы Имя и Дата зачисленияTemplateField следующей разметкой:
<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 замените разметку для столбцов Name и Enrollment Date так же, как в элементе управления StudentsGridView, за исключением элемента EditItemTemplate. Элемент Columns элемента управления SearchGridView теперь содержит следующую разметку:
<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.
Запустите страницу.
В столбце "Дата регистрации" время отображается вместе с датой, так как тип свойства имеет значение DateTime. Вы исправите это позже.
Теперь обратите внимание, что динамические данные автоматически предоставляют базовую проверку данных. Например, нажмите кнопку "Изменить", снимите поле даты, нажмите кнопку "Обновить", и вы увидите, что динамические данные автоматически делают это обязательное поле, так как значение не допускает значения NULL в модели данных. На странице отображается звездочка после поля и сообщение об ошибке в управляющем элементе ValidationSummary.
Вы можете опустить ValidationSummary контрол, так как вы также можете навести указатель мыши на звездочку, чтобы увидеть сообщение об ошибке.
Динамические данные также проверяют, что данные, введенные в поле "Дата регистрации", являются допустимой датой:
Как видно, это универсальное сообщение об ошибке. В следующем разделе вы узнаете, как настроить сообщения, а также правила проверки и форматирования.
Добавление метаданных в модель данных
Как правило, необходимо настроить функциональные возможности, предоставляемые динамическими данными. Например, можно изменить способ отображения данных и содержимое сообщений об ошибках. Обычно вы также настраиваете правила проверки данных для обеспечения большей функциональности, чем то, что Dynamic Data предоставляет автоматически на основе типов данных. Для этого создаются частичные классы, соответствующие типам сущностей.
В Обозреватель решений щелкните правой кнопкой мыши проект ContosoUniversity, выберите "Добавить ссылку" и добавьте ссылкуSystem.ComponentModel.DataAnnotations.
В папке 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 , и вы увидите, что даты отображаются без времени:
Измените строку и попытайтесь очистить значения в полях имени. Звездочки, указывающие на ошибки в поле, отображаются как только вы покинете поле, перед нажатием кнопки "Обновить". При нажатии кнопки "Обновить" на странице отображается указанный текст сообщения об ошибке.
Попробуйте ввести имена, длина которых превышает 25 символов, нажмите кнопку "Обновить", а на странице отображается указанный текст сообщения об ошибке.
Теперь, когда вы настроили эти правила форматирования и проверки в метаданных модели данных, правила будут автоматически применяться на каждой странице, отображающей или разрешающей изменения этих полей, если вы используете DynamicControl или DynamicField элементы управления. Это сокращает объем избыточного кода, который упрощает программирование и тестирование, и гарантирует согласованность форматирования и проверки данных во всем приложении.
Дополнительные сведения
Этим завершается серия руководств по началу работы с Entity Framework. Дополнительные ресурсы, которые помогут вам узнать, как использовать Entity Framework, перейдите к первому руководству в следующем руководстве по Entity Framework или посетите следующие сайты:
- Блог группы Entity Framework
- Entity Framework в библиотеке MSDN
- Entity Framework в Центре разработчиков данных MSDN
- Общие сведения об элементе управления Web Server EntityDataSource в библиотеках MSDN
- Справочник по API элемента управления EntityDataSource в библиотеке MSDN
- Форумы Entity Framework в MSDN
- Блог Джули Лермана