2014-10-07 60 views
0

我是MVC(和web開發)的新手。目前,我的應用程序使用MVC 5。ASP.NET MVC索引操作被調用每個回發

我有一個Web應用程序和用戶界面就像在下面的截圖。基本上,它是一個單頁面應用程序,我需要根據用戶從頂部的單選按鈕選擇底部加載網格。如果點擊最新,則最新的用戶數據綁定到網格。同樣,如果選擇歷史數據,則歷史數據將綁定到同一個網格。

我在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頁。

請幫助我處理這種情況。

僅供參考:我使用Grid.Mvc作爲數據網格,Bottstrap作爲UI控件。

enter image description here

+0

「綁定到網格」需要擴展這個問題纔有意義。 – spender 2014-10-07 17:04:40

+0

@spender我已經添加了關於如何將它綁定到視圖和網格的示例。我還在問題底部的註釋中添加了對Grid.MVC演示的超鏈接。希望能幫助到你。 – utkarsh 2014-10-07 17:20:33

回答

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

而且你的索引視圖(參考更改爲User模型與適當的命名空間)

@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 })) 
+0

我已經在我的代碼中介紹了這部分,並不能解決我的問題。順便說一句,Grid.Mvc控件已經處理相同的分頁策略。假設,我通過索引操作加載了最新的用戶。現在用戶想要查看歷史數據並應用過濾器 - 因此它將轉到「過濾器」操作並清除網格並將歷史數據加載到同一個網格。現在用戶點擊網格中的第2頁。此事件不會通過HTTP-POST來執行Filter操作,而是通過Index(http Get)操作進行。因此,它會再次加載最新的數據(理想情況下,我應該顯示第2頁的歷史數據)。 – utkarsh 2014-10-07 20:02:39

相關問題