asp.net core mvc view의 viewModel 값 전달 질문 드립니다

controller에서 viewModel을 받아 result를 db에서 쿼리해 뿌리는 작업을 하고 있습니다.
page.cshtml의 검색 조건을 변경 후, 페이지를 변경하면 기존 viewModel에서 값만 변경돼 적용되는 것이 아닌 새 viewModel이 생성돼 검색 조건이 사라집니다.

찾아본 예제에서는 asp-route- 태그 or ViewData로 값을 하나하나 지정해 처리하는 방법만 보이는데, 수정된 viewModel을 controller로 넘기거나 WPF의 Dependency Property처럼 값이 변경되는 즉시 result가 변경되게 하는 방법이 있을까요?

ViewModel

[BindProperties]
public class ReviewsPageViewModel
{
    public ReviewsPageViewModel()
    {
        SearchingText = "";
        SearchingProperty = ESearchingProperty.ItemName;
        OrderBy = EReviewOrderBy.Id;
        Page = 1;
        Count = 20;
        IsAscending = true;
    }

    [FromQuery]
    public string SearchingText { get; set; }

    [FromQuery]
    public ESearchingProperty SearchingProperty { get; set; }

    [FromQuery]
    public EReviewOrderBy OrderBy { get; set; }

    [FromQuery]
    public int Page { get; set; }

    [FromQuery]
    public int Count { get; set; }

    [FromQuery]
    public int AllResultCount { get; set; }

    [FromQuery]
    public bool IsAscending { get; set; }

    public int LastPage => AllResultCount % Count == 0 ? AllResultCount / Count : AllResultCount / Count + 1;

    public List<ReviewInfo> SearchResult { get; set; }
}

Controller

[HttpGet("[controller]/Page/")]
public async Task<IActionResult> Page(ReviewsPageViewModel viewModel)
{
    /*ViewModel의 SearchingText, SearchingProperty, 
OrderBy, Page, Count, IsAscending으로 viewModel.SearchResult를 DB에서 쿼리*/
    reutrn View(viewModel)
}

Page.cshtml

@model ReviewsPageViewModel

@{
    ViewData["Title"] = "Review Page";
    string controller = "Reviews";
    string action = "Page";
}

<!-- 검색 조건 --!>
<form method="get" asp-controller="@controller" asp-action="@action">
    <select asp-for="SearchingProperty">
        <option value="@ESearchingProperty.ItemName">리뷰 아이템 이름</option>
        <option value="@ESearchingProperty.Title">제목</option>
        <option value="@ESearchingProperty.UserName">작성자 이름</option>
    </select>

    <input type="search" asp-for="SearchingText" />
</form>

<!-- 페이징 --!>
<nav aria-label="Page navigation">
    <ul class="pagination justify-content-center">
        @{
            if (Model.LastPage == 1)
            {
                <li class="page-item"><a class="page-link" asp-controller="@controller" asp-action="@action" asp-route-page="1">1</a></li>
            }
            else
            {
                if (Model.Page != 1)
                {
                    <li class="page-item"><a class="page-link" asp-controller="@controller" asp-action="@action" asp-route-page=@(Model.Page - 1)>Prev</a></li>
                }

                int startPage = Model.Page - 2 > 0 ? Model.Page - 2 : 1;
                int endPage = Model.Page + 10 <= Model.LastPage ? Model.Page + 10 : Model.LastPage;
                for (; startPage <= endPage; ++startPage)
                {
                    if (startPage == Model.Page)
                    {
                        <li class="page-item active"><a class="page-link" asp-controller="@controller" asp-action="@action" asp-route-page="@startPage">@startPage</a></li>
                    }
                    else
                    {
                        <li class="page-item"><a class="page-link" asp-controller="@controller" asp-action="@action" asp-route-page="@startPage">@startPage</a></li>
                    }
                }

                if (Model.Page != Model.LastPage)
                {
                    <li class="page-item"><a class="page-link" asp-controller="@controller" asp-action="@action" asp-route-page="@(Model.Page + 1)" asp-route-searchingItemName=@Model.SearchingText>Next</a></li>
                    <li class="page-item"><a class="page-link" asp-controller="@controller" asp-action="@action" asp-route-page="@(Model.LastPage)" asp-route-searchingItemName=@Model.SearchingText>Last</a></li>
                }
            }
        }
    </ul>
</nav>
1개의 좋아요