начало работы с entity Framework 4.0 Database First и ASP.NET 4 веб-формы — часть 8
Пример веб-приложения Университета Contoso демонстрирует создание ASP.NET Web Forms приложений с помощью Entity Framework 4.0 и Visual Studio 2010. Сведения о серии учебников см. в первом руководстве этой серии.
Использование функциональных возможностей динамических данных для форматирования и проверки данных
В предыдущем руководстве вы реализовали хранимые процедуры. В этом руководстве показано, как функциональные возможности динамических данных могут обеспечить следующие преимущества:
- Поля автоматически форматируются для отображения на основе их типа данных.
- Поля проверяются автоматически на основе их типа данных.
- Вы можете добавить метаданные в модель данных, чтобы настроить форматирование и поведение проверки. После этого можно добавить правила форматирования и проверки только в одном месте, и они автоматически применяются везде, где вы обращаетесь к полям с помощью элементов управления динамическими данными.
Чтобы увидеть, как это работает, измените элементы управления, используемые для отображения и изменения полей на существующей странице Students.aspx , а также добавите метаданные форматирования и проверки в поля имени и даты типа сущности Student
.
Использование элементов управления 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
управления замените разметку для столбцов Имя и Дата регистрации , как это было в элементе 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
, так как можно также навести указатель мыши на звездочку, чтобы увидеть сообщение об ошибке:
Динамические данные также проверят, что данные, введенные в поле Дата регистрации , являются допустимой датой:
Как видите, это общее сообщение об ошибке. В следующем разделе вы узнаете, как настроить сообщения, а также правила проверки и форматирования.
Добавление метаданных в модель данных
Как правило, требуется настроить функциональные возможности, предоставляемые динамическими данными. Например, можно изменить способ отображения данных и содержимое сообщений об ошибках. Как правило, вы также настраиваете правила проверки данных, чтобы предоставить больше функциональных возможностей, чем динамические данные предоставляют автоматически на основе типов данных. Для этого создаются разделяемые классы, соответствующие типам сущностей.
В Обозреватель решений щелкните правой кнопкой мыши проект 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
- Общие сведения о серверном веб-элементе управления EntityDataSource в библиотека MSDN
- Справочник по API элемента управления EntityDataSource в библиотека MSDN
- Форумы Entity Framework на сайте MSDN
- Блог Джули Лерман
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по