본문 바로가기

Asp.net (C#.net)

Asp.net Mvc PagedList 페이징 처리 (검색 기능 포함) (2)

검색 기능 추가이다.
기본 환경은 1편이랑 동일하고 몇몇 구문이 추가가 된다.

 

 

1. Controller 수정

: 우성 컨트롤러부터 수정한다. 가장 기본적인거는 검색어이다. 그런데 변수를 2개 쓴다.

우리가 5페이지를 보고 있다가 갑자기 검색을 하게 된다고 가정을 한다면..

검색된 후 페이지가 어떻게 될까? 아마도 검색 후 1페이지가 아닌 5페이지를 가르키게 된다.

개인적으로는 그래도 된다고 생각한다만;;; 너무 논리적이잖아.. 난 전혀 안이상해..;;

그리고 검색어로 다시 8페이지 보고 있다가 다시 검색할때...

어라 새 검색어야? 아니면 기존에 보고 있던 검색어야? 판단해야 한다..

그래서 부득이하게 이런걸 없애기 위해서 검색어는 2개의 변수에 저장한다.

녹색은 주석이고 파란색이 추가된 부분이다.

 

[Controller]

 

 

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;

}

 

 

 

[View 페이징 리스트]

 

 

<div>
    <div class="col-xs-12 text-center">
        @Html.PagedListPager(Model, Page => Url.Action("Index", new { Page, CurrentSchTxt = SchTxt }))

    </div>
</div>

 

 

[View 검색창]

 

 

// 검색창은 수정이 아니라 추가 입니다.

<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)