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

; автор — Том ФитцМакен (Tom FitzMacken)

В этой серии учебников демонстрируются основные аспекты использования привязки модели с проектом ASP.NET Web Forms. Привязка модели делает взаимодействие с данными более прямым, чем работа с объектами источника данных (например, ObjectDataSource или SqlDataSource). Эта серия начинается с вводного материала и переходит к более сложным концепциям в последующих руководствах.

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

Этот учебник основан на проекте, созданном в предыдущих частях серии.

Вы можете скачать полный проект на C# или VB. Загружаемый код работает с Visual Studio 2012 или Visual Studio 2013. В нем используется шаблон Visual Studio 2012, который немного отличается от шаблона Visual Studio 2013, показанного в этом руководстве.

Содержание задачи

В этом руководстве вы выполните следующие действия.

  1. Добавление новой страницы для отображения зарегистрированных курсов для учащегося
  2. Получение зарегистрированных курсов для выбранного учащегося на основе значения в строке запроса
  3. Добавление гиперссылки со значением строки запроса из представления сетки на новую страницу

Действия, описанные в этом руководстве, практически похожи на действия, описанные в предыдущем руководстве по фильтрации отображаемых учащихся по выбору пользователей в раскрывающемся списке. В этом руководстве вы использовали атрибут 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.

В следующем руководстве вы переместите код из файлов кода программной части на уровень бизнес-логики и уровень доступа к данным.