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

Tom FitzMacken

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

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

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

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

Что вы будете создавать

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

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

Действия, описанные в этом руководстве, довольно похожи на то, что вы сделали в предыдущем руководстве , чтобы отфильтровать отображаемых учащихся на основе выбора пользователя в раскрывающемся списке. В этом руководстве вы использовали атрибут Control в методе выбора, чтобы указать, что значение параметра поступает из элемента управления. В этом руководстве вы будете использовать атрибут QueryString в методе выбора, чтобы указать, что значение параметра поступает из строки запроса.

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

Добавьте новую веб-форму, использующую главную страницу Site.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 добавьте следующее поле в столбцы представления сетки под полем "Итоговые кредиты".

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

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

Добавление гиперссылки

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

показать курсы

Conclusion

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

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