검색 기능 추가이다.
기본 환경은 1편이랑 동일하고 몇몇 구문이 추가가 된다.
1. Controller 수정
: 우성 컨트롤러부터 수정한다. 가장 기본적인거는 검색어이다. 그런데 변수를 2개 쓴다.
우리가 5페이지를 보고 있다가 갑자기 검색을 하게 된다고 가정을 한다면..
검색된 후 페이지가 어떻게 될까? 아마도 검색 후 1페이지가 아닌 5페이지를 가르키게 된다.
개인적으로는 그래도 된다고 생각한다만;;; 너무 논리적이잖아.. 난 전혀 안이상해..;;
그리고 검색어로 다시 8페이지 보고 있다가 다시 검색할때...
어라 새 검색어야? 아니면 기존에 보고 있던 검색어야? 판단해야 한다..
그래서 부득이하게 이런걸 없애기 위해서 검색어는 2개의 변수에 저장한다.
녹색은 주석이고 파란색이 추가된 부분이다.
public ActionResult Index(string CurrentSchTxt, string SchTxt, int? Page)
{
// SchTxt가 신규 검색어이다.
if (SchTxt != null)
{
// 신규 검색어가 있으면 페이지는 1페이지로 한다.
Page = 1;
}
else
{
// 신규 검색어가 아닌 기존 검색어가 넘어올경우 기존 검색어를 SchTxt에 넣어준다.
// CurrentFilter 새 검색어가 입력되기 전까지 검색어는 이 녀석이 가지고 있다.
// 그리고 가지고 있는 값을 매번 SchTxt에 넘겨준다.
SchTxt = CurrentSchTxt;
}
// 검색어는 ViewBag.CurrentFilter로 뷰에 넘겨준다.
ViewBag.CurrentFilter = SchTxt;
var banners = from b in db.Banners
select b;
// 검색어가 있을 경우 검색한다.
if (!String.IsNullOrEmpty(SchTxt))
{
banners = banners.Where(t => b.Title.ToUpper().Contains(SchTxt.ToUpper()));
}
// 아래는 단순 정렬
banners = banners.OrderByDescending(b => t.Id);
int PageNo = Page ?? 1;
int PageSize = 3;
return View(banners.ToPagedList(PageNo, PageSize));
}
2. View 수정
: 컨트롤러 다음은 뷰다.
우선 상단에서 컨트롤러부터 검색어를 넘겨받는다.
그 후에 페이징 리스트가 표시되는 부분에 페이지를 넘길때 검색어도 같이 넘기는 작업이 필요하다.
그리고 마지막으로 검색창을 단다.
[View 상단]
@{
// 컨트롤러부터 검색어를 넘겨 받아 변수에 저장한다.
string SchTxt = ViewBag.CurrentSchTxt;
}
<div>
<div class="col-xs-12 text-center">
@Html.PagedListPager(Model, Page => Url.Action("Index", new { Page, CurrentSchTxt = SchTxt }))
</div>
</div>
// 검색창은 수정이 아니라 추가 입니다.
<div class="form-group">
@using (Html.BeginForm("Index", "Banner", FormMethod.Get))
{
<div class="col-xs-8 col-lg-4">
// @value 에 컨트롤러로부터 받아온 검색어를 넣어준다.
@Html.TextBox("SchTxt", null, new { @placeholder = "검색어를 입력해주세요", @value = SchTxt, @class = "form-control input-sm" })
</div>
<div class="col-xs-4 col-lg-2">
// 검색 버튼
<input type="submit" value="검색" class="btn btn-default input-sm" />
</div>
}
</div>
끝이다.
게시판의 꽃인 페지이 및 검색 작업이 아주 쉽게 끝났다.
포스팅도 생각보다 편했다.
그리고 마지막으로 조금전에 혹 해서 찾아본 기능인 엮인글(?) 기능...
혹시 1편을 못보셨다면 준비했습니다~
- 관련 글 -
2018/06/28 - [Asp.net] - Asp.net Mvc PagedList 페이징 처리 (검색 기능 포함) (1)
'Asp.net (C#.net)' 카테고리의 다른 글
Visual Studio (비주얼 스튜디오) Asp.net Mvc 에서 WebMatrix 사용하기 (0) | 2018.07.11 |
---|---|
asp.net (c#) 문자열 비교 (Compare, CompareTo, Equals, ==) (1) | 2018.07.04 |
asp.net (c#) 동적 배열 (ArrayList, List<T>) (0) | 2018.07.04 |
asp.net Mvc5 passwod validation 변경 (암호 정책 변경) (0) | 2018.07.04 |
Asp.net Mvc PagedList 페이징 처리 (검색 기능 포함) (1) (0) | 2018.06.28 |