[C#/ASP.NET MVC/.NETCORE] BindPropertyAttribute 클래스 : SupportsGet 속성 사용하기
C#/ASP.NET MVC 2020. 10. 18. 20:25728x90
반응형
728x170
■ BindPropertyAttribute 클래스의 SupportsGet 속성을 사용하는 방법을 보여준다.
▶ Pages/Movies/Index.cshtml
@page
@using TestProject.Models
@model TestProject.Pages.Movies.IndexModel
@{
ViewData["Title"] = "Index";
}
<h1>Index</h1>
<p>
<a asp-page="Create">Create New</a>
</p>
<form>
<p>
<select asp-for="MovieGenre" asp-items="Model.GenreSelectList">
<option value="">All</option>
</select>
Title : <input type="text" asp-for="SearchString" />
<input type="submit" value="Filter" />
</p>
</form>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.MovieList[0].Title)
</th>
<th>
@Html.DisplayNameFor(model => model.MovieList[0].ReleaseDate)
</th>
<th>
@Html.DisplayNameFor(model => model.MovieList[0].Genre)
</th>
<th>
@Html.DisplayNameFor(model => model.MovieList[0].Price)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach(Movie movie in Model.MovieList)
{
<tr>
<td>
@Html.DisplayFor(modelItem => movie.Title)
</td>
<td>
@Html.DisplayFor(modelItem => movie.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => movie.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => movie.Price)
</td>
<td>
<a asp-page="./Edit" asp-route-id="@movie.ID">Edit</a> |
<a asp-page="./Details" asp-route-id="@movie.ID">Details</a> |
<a asp-page="./Delete" asp-route-id="@movie.ID">Delete</a>
</td>
</tr>
}
</tbody>
</table>
▶ Pages/Movies/Index.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TestProject.Data;
using TestProject.Models;
namespace TestProject.Pages.Movies
{
/// <summary>
/// 인덱스 모델
/// </summary>
public class IndexModel : PageModel
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 컨텍스트
/// </summary>
private readonly DatabaseContext context;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 영화 리스트 - MovieList
/// <summary>
/// 영화 리스트
/// </summary>
public IList<Movie> MovieList { get;set; }
#endregion
#region 검색 문자열 - SearchString
/// <summary>
/// 검색 문자열
/// </summary>
[BindProperty(SupportsGet = true)]
public string SearchString { get; set; }
#endregion
#region 장르 선택 리스트 - GenreSelectList
/// <summary>
/// 장르 선택 리스트
/// </summary>
public SelectList GenreSelectList { get; set; }
#endregion
#region 영화 장르 - MovieGenre
/// <summary>
/// 영화 장르
/// </summary>
[BindProperty(SupportsGet = true)]
public string MovieGenre { get; set; }
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - IndexModel(context)
/// <summary>
/// 생성자
/// </summary>
/// <param name="context">컨텍스트</param>
public IndexModel(DatabaseContext context)
{
this.context = context;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region GET 비동기 처리하기 - OnGetAsync()
/// <summary>
/// GET 비동기 처리하기
/// </summary>
/// <returns>태스크</returns>
public async Task OnGetAsync()
{
var genreQueryable = from movie in this.context.Movie
orderby movie.Genre
select movie.Genre;
var movieQueryable = from movie in this.context.Movie
select movie;
if(!string.IsNullOrEmpty(SearchString))
{
movieQueryable = movieQueryable.Where(s => s.Title.Contains(SearchString));
}
if(!string.IsNullOrEmpty(MovieGenre))
{
movieQueryable = movieQueryable.Where(x => x.Genre == MovieGenre);
}
GenreSelectList = new SelectList(await genreQueryable.Distinct().ToListAsync());
MovieList = await movieQueryable.ToListAsync();
}
#endregion
}
}
※ TestDB 데이터베이스 생성
1. 비주얼 스튜디오를 실행한다.
2. 비주얼 스튜디오에서 [보기] / [SQL Server 개체 탐색기] 메뉴를 클릭한다.
3. [SQL Server 개체 탐색기]에서 [SQL Server] / [(localdb)MSSQLLocalDB...] / [데이터베이스] 노드 위에서 마우스 오른쪽 버튼을 클릭한다.
4. 컨텍스트 메뉴에서 [새 데이터베이스 추가] 메뉴를 클릭한다.
5. [데이터베이스 만들기] 대화 상자에서 아래와 같이 입력하고 [확인] 버튼을 클릭한다.
6. 비주얼 스튜디오에서 [도구] / [NuGet 패키지 관리자] / [패키지 관리자 콘솔] 메뉴를 클릭한다.
7. [패키지 관리자 콘솔]에서 아래 명령을 실행한다.
▶ 실행 명령
Update-Database
728x90
반응형
그리드형(광고전용)
'C# > ASP.NET MVC' 카테고리의 다른 글
[C#/ASP.NET MVC/.NETCORE] 누겟 설치 : Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation (0) | 2020.10.20 |
---|---|
[C#/ASP.NET MVC/.NETCORE] 스캐폴딩 기능을 사용해 MVC 웹앱 만들기 (0) | 2020.10.19 |
[C#/ASP.NET MVC/.NETCORE] ValidateAntiForgeryTokenAttribute 클래스 : 위조 방지 토큰 확인하기 (0) | 2020.10.19 |
[C#/ASP.NET MVC/.NETCORE] dotnet new mvc 명령 : MVC 웹앱 만들기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] 스캐폴딩 기능을 사용해 RAZOR 페이지 웹앱 만들기 (최종) (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] @page 지시문 : 경로 템플리트 추가하기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] @page 지시문 : 경로 템플리트 추가하기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] ServiceProviderServiceExtensions 클래스 : GetRequiredService<T> 확장 메소드를 사용해 데이터베이스 컨텍스트 구하기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] @model 지시문 사용하기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] @page 지시문 사용하기 (0) | 2020.10.18 |
댓글을 달아 주세요