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

; автор — Том ФитцМакен (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, чтобы указать, что значение параметра берется из строки запроса.

Добавление новой страницы для отображения курсов учащихся

Добавьте новую веб-форму, использующую главную страницу site. master, и назовите страницы Courses.

В файле 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 автоматически назначается параметру в этом методе.

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

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

<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" />

Запустите приложение и обратите внимание, что в представлении "Сетка" теперь есть ссылка "курсы".

Add hyperlink

Щелкнув одну из ссылок, вы увидите зарегистрированные курсы учащегося.

show courses

Заключение

В этом руководстве вы добавили ссылку со значением строки запроса. Вы использовали это значение строки запроса для значения параметра в методе Select.

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