Использование значений строки запроса для фильтрации данных с помощью привязки модели и веб-форм
; автор — Том ФитцМакен (Tom FitzMacken)
В этой серии учебников демонстрируются основные аспекты использования привязки модели с проектом ASP.NET Web Forms. Привязка модели делает взаимодействие с данными более прямым, чем работа с объектами источника данных (например, ObjectDataSource или SqlDataSource). Эта серия начинается с вводного материала и переходит к более сложным концепциям в последующих руководствах.
В этом руководстве показано, как передать значение в строке запроса и использовать его для извлечения данных с помощью привязки модели.
Этот учебник основан на проекте, созданном в предыдущих частях серии.
Вы можете скачать полный проект на C# или VB. Загружаемый код работает с Visual Studio 2012 или Visual Studio 2013. В нем используется шаблон Visual Studio 2012, который немного отличается от шаблона Visual Studio 2013, показанного в этом руководстве.
Содержание задачи
В этом руководстве вы выполните следующие действия.
- Добавление новой страницы для отображения зарегистрированных курсов для учащегося
- Получение зарегистрированных курсов для выбранного учащегося на основе значения в строке запроса
- Добавление гиперссылки со значением строки запроса из представления сетки на новую страницу
Действия, описанные в этом руководстве, практически похожи на действия, описанные в предыдущем руководстве по фильтрации отображаемых учащихся по выбору пользователей в раскрывающемся списке. В этом руководстве вы использовали атрибут Control в методе select, чтобы указать, что значение параметра поступает из элемента управления . В этом руководстве вы будете использовать атрибут QueryString в методе select, чтобы указать, что значение параметра поступает из строки запроса.
Добавление новой страницы для отображения курсов учащихся
Добавьте новую веб-форму, которая использует сайт. master master страницу и назовите страницу Курсы.
В файле Courses.aspx добавьте представление сетки, чтобы отобразить курсы для выбранного учащегося.
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<asp:GridView runat="server" ID="coursesGrid"
ItemType="ContosoUniversityModelBinding.Models.Enrollment"
SelectMethod="coursesGrid_GetData" AutoGenerateColumns="false">
<Columns>
<asp:BoundField HeaderText="Title" DataField="Course.Title" />
<asp:BoundField HeaderText="Credits" DataField="Course.Credits" />
<asp:BoundField HeaderText="Grade" DataField="Grade" />
</Columns>
<EmptyDataTemplate>
<asp:Label Text="No Enrolled Courses" runat="server" />
</EmptyDataTemplate>
</asp:GridView>
</asp:Content>
Определение метода select
В Файле Courses.aspx.cs вы добавите метод select с именем, указанным в свойстве SelectMethod представления сетки. В этом методе вы определите запрос для получения курсов учащегося и укажите, что параметр поступает из значения строки запроса с тем же именем, что и параметр .
Сначала необходимо добавить следующие операторы using .
using ContosoUniversityModelBinding.Models;
using System.Web.ModelBinding;
using System.Data.Entity;
Затем добавьте следующий код в файл Courses.aspx.cs:
public IQueryable<Enrollment> coursesGrid_GetData([QueryString] int? studentID)
{
SchoolContext db = new SchoolContext();
var query = db.Enrollments.Include(e => e.Course)
.Where(e => e.StudentID == studentID);
return query;
}
Атрибут QueryString означает, что значение строки запроса с именем StudentID автоматически назначается параметру в этом методе.
Добавление гиперссылки со значением строки запроса
В представлении сетки на сайте Students.aspx вы добавите поле гиперссылки, которое ссылается на новую страницу "Курсы". Гиперссылка будет содержать значение строки запроса с идентификатором учащегося.
В Students.aspx добавьте следующее поле в столбцы представления сетки сразу под полем Total Credits (Общий объем кредитов).
<asp:TemplateField HeaderText="Total Credits">
<ItemTemplate>
<asp:Label Text="<%# Item.Enrollments.Sum(en => en.Course.Credits) %>"
runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:HyperLinkField Text="Courses" DataNavigateUrlFormatString="~/Courses.aspx?StudentID={0}"
DataNavigateUrlFields="StudentID" />
Запустите приложение и обратите внимание, что представление сетки теперь содержит ссылку Курсы.
Щелкнув одну из ссылок, вы увидите зарегистрированные курсы этого учащегося.
Заключение
В этом руководстве вы добавили ссылку со значением строки запроса. Вы использовали это значение строки запроса для значения параметра в методе select.
В следующем руководстве вы переместите код из файлов кода программной части на уровень бизнес-логики и уровень доступа к данным.