2014-10-07 6 views
0

MVC (및 웹 개발)에 익숙하지 않습니다. 현재 MVC 5를 사용하고 있습니다.ASP.NET MVC 인덱스 작업이 모든 포스트 백에서 호출 됨

웹 응용 프로그램이 있으며 UI는 아래 스크린 샷과 같습니다. 기본적으로 이것은 단일 페이지 응용 프로그램이므로 상단의 라디오 버튼에서 사용자 선택에 따라 하단에 그리드를로드해야합니다. 최신을 클릭하면 최신 사용자 데이터가 눈금에 바인딩됩니다. 마찬가지로, historical가 선택되면 역사적인 데이터는 동일한 그리드에 바인딩됩니다.

HomeController.cs의 내 동작은 다음과 같습니다. 사용자가 기록 데이터 인해를 보는 경우 주석의 요청으로

public ActionResult Index() 
{ 
    var viewModel = new ViewModel(); 
    List users = GetLatestUsers(); 
    viewModel.Users = users; 
    return View(viewModel); 
} 

[HttpPost] 
public ActionResult Filter(ViewModel postData) 
{ 
    List users = GetHistoricUsers(); 
    viewModel.Users = users; 
    return View(viewModel); 
} 

그냥 더 정교한 것으로, 나는이

@Html.Grid(Model).Columns(columns => 
{ 
/* Adding not mapped column, that renders body, using inline Razor html helper */ 
columns.Add() 
     .Encoded(false) 
     .Sanitized(false) 
     .SetWidth(30) 
     .RenderValueAs(d => 
      @<b> 
       @Html.ActionLink("Edit", "Index") 
      </b>); 


    /* Adding "OrderID" column: */ 
    columns.Add(o => o.OrderID) 
      .Titled("Number") 
      .SetWidth(100); 

    /* Adding "Vip customer" column: */ 
    columns.Add(o => o.Customer.IsVip) 
      .Titled("Vip customer") 
      .SetWidth(150) 
      .RenderValueAs(o => CustomRenderingOfColumn(o)); 

}).SetRowCssClasses(item => item.Customer.IsVip ? "warning" : string.Empty).WithPaging(15).Sortable().Filterable().WithMultipleFilters() 

지금 직면하고있는 문제처럼 내보기 뭔가 그리드에 바인딩하고 Filter 작업의 경우 그리드에 기록 데이터를로드합니다. 사용자가 그리드의 페이지 매김 컨트롤을 사용하여 다음 페이지로 이동하면 포스트 백이 트리거되므로 인덱싱 작업을 수행하고 항상 최신 데이터를로드합니다. 이상적으로, 나는 동일한 페이지에 머물러 있어야하며 2 페이지에 표시 될 다음 역사적인 데이터를 보여 주어야합니다.

이 시나리오를 처리하는 방법을 도와주십시오.

FYI : 데이터 격자에는 Grid.Mvc을 사용하고 UI 컨트롤에는 Bottstrap을 사용하고 있습니다.

enter image description here

+0

"바운드에 연결됨"은이 질문을 이해하기 위해 확장해야합니다. – spender

+0

@spender보기에 그리드에 바인딩하는 방법에 대한 예제가 추가되었습니다. 또한 질문의 맨 아래에 메모로 Grid.MVC 데모에 대한 하이퍼 링크를 추가했습니다. 희망이 도움이됩니다. – utkarsh

답변

0

는 MVC에는 postback 없습니다. ASP.NET MVC는 webforms과 다릅니다. 페이지 설정 링크를 클릭 할 때 다른 데이터 세트 (2 페이지, 3 페이지 등)를 표시해야하는 경우 맞춤 코드를 작성해야합니다. 그렇지 않으면 PagedList을 고려해 볼 수 있습니다.

PagedList.Mvc를 설치하려면 Package Manager Console에서 다음 명령을 실행하십시오. NuGet을 사용하여이 패키지를 얻을 수도 있습니다. 컨트롤러에서

PM> Install-Package PagedList.Mvc 

, 참조 PagedList 및 컨트롤러의 색인 방법은

using PagedList; 

public ActionResult Index(int? page) 
{ 
     var viewModel = new ViewModel(); 
     List users = GetLatestUsers(); 
     viewModel.Users = users; 

     int pageSize = 3; 
     int pageNumber = (page ?? 1); 
     return View(viewModel.Users.ToPagedList(pageNumber, pageSize)); 
} 

그리고 당신의 인덱스보기 같은 것

@model PagedList.IPagedList<Users> 
@using PagedList.Mvc; 
<link href="/Content/PagedList.css" rel="stylesheet" type="text/css" /> 

<table> 
@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.UserId) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.UserName) 
     </td> 
    </tr> 
} 
</table> 

<br /> 

Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount 
@Html.PagedListPager(Model, page => Url.Action("Index", new { page })) 
(적절한 네임 스페이스와 User 모델에 대한 참조를 변경)
+0

나는이 코드를 내 코드에 포함 시켰고 내 문제를 해결하지 못했다. BTW, Grid.Mvc 컨트롤은 이미 페이지 매김을 수행하는 동일한 전략을 처리합니다. 인덱스 작업을 통해 최신 사용자를로드했다고 가정합니다. 이제 사용자는 이전 데이터를보고 필터를 적용하므로 필터 동작으로 이동하고 그리드를 지우고 이전 데이터를 동일한 그리드에로드합니다. 이제 사용자는 그리드에서 2 페이지를 클릭합니다. 이 이벤트는 HTTP-POST to Filter 액션을 수행하지 않고 대신 Index (http Get) 액션을 통해 진행됩니다. 따라서 최신 데이터를 다시로드합니다 (이상적으로는 역사적인 데이터의 2 페이지를 표시해야합니다). – utkarsh