다음을 통해 공유


쿼리 문자열 값을 사용하여 모델 바인딩 및 웹 양식으로 데이터 필터링

Tom FitzMacken

이 자습서 시리즈에서는 ASP.NET Web Forms 프로젝트에서 모델 바인딩을 사용하는 기본 측면을 보여 줍니다. 모델 바인딩을 사용하면 데이터 원본 개체(예: ObjectDataSource 또는 SqlDataSource)를 처리하는 것보다 데이터 상호 작용이 더 간단해집니다. 이 시리즈는 소개 자료로 시작하고 이후 자습서에서 고급 개념으로 이동합니다.

이 자습서에서는 쿼리 문자열에 값을 전달하고 해당 값을 사용하여 모델 바인딩을 통해 데이터를 검색하는 방법을 보여줍니다.

이 자습서는 시리즈의 이전 부분에서 만든 프로젝트를 기반으로 합니다.

C# 또는 VB에서 전체 프로젝트를 다운로드 할 수 있습니다. 다운로드 가능한 코드는 Visual Studio 2012 또는 Visual Studio 2013 작동합니다. 이 자습서에 표시된 Visual Studio 2013 템플릿과 약간 다른 Visual Studio 2012 템플릿을 사용합니다.

빌드할 내용

이 자습서에서는 다음을 수행합니다.

  1. 학생에 대해 등록된 과정을 표시하는 새 페이지 추가
  2. 쿼리 문자열의 값을 기반으로 선택한 학생에 대해 등록된 과정 검색
  3. 그리드 보기에서 새 페이지로 쿼리 문자열 값이 있는 하이퍼링크 추가

이 자습서의 단계는 드롭다운 목록의 사용자 선택에 따라 표시된 학생을 필터링하기 위해 이전 자습서 에서 수행한 것과 매우 유사합니다. 이 자습서에서는 select 메서드에서 Control 특성을 사용하여 매개 변수 값이 컨트롤에서 오도록 지정했습니다. 이 자습서에서는 select 메서드의 QueryString 특성을 사용하여 매개 변수 값이 쿼리 문자열에서 오도록 지정합니다.

학생의 과정을 표시하기 위한 새 페이지 추가

사이트를 사용하는 새 웹 양식을 추가합니다. 페이지를 master 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에서 표 보기의 SelectMethod 속성에 지정한 이름으로 select 메서드를 추가합니다. 이 메서드에서는 학생의 과정을 검색하기 위한 쿼리를 정의하고 매개 변수가 매개 변수와 이름이 같은 쿼리 문자열 값에서 오게 되도록 지정합니다.

먼저 다음 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의 그리드 보기에서 새 과정 페이지에 연결되는 하이퍼링크 필드를 추가합니다. 하이퍼링크에는 학생의 ID가 있는 쿼리 문자열 값이 포함됩니다.

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

애플리케이션을 실행하고 그리드 보기에 이제 Courses 링크가 포함되어 있음을 알 수 있습니다.

하이퍼링크 추가

링크 중 하나를 클릭하면 해당 학생의 등록 과정이 표시됩니다.

과정 표시

결론

이 자습서에서는 쿼리 문자열 값이 있는 링크를 추가했습니다. select 메서드의 매개 변수 값에 대해 해당 쿼리 문자열 값을 사용했습니다.

다음 자습서에서는 코드 숨김 파일에서 비즈니스 논리 계층 및 데이터 액세스 계층으로 코드를 이동합니다.