2011-04-16 91 views
2

我想應用排序過Ajax,我設法將排序列名稱發送到我的控制器,並執行orderby查詢在我的數據庫中,任何人都可以告訴我如何發送排序順序嗎?反向排序MVC3 Ajax WebGrid

查看

<div id="grid"> 
@{ 
    var grid = new WebGrid(canPage: true, rowsPerPage: Ctrl.PageSize, canSort: true, ajaxUpdateContainerId: "grid"); 
    grid.Bind(Model.Events, rowCount: Model.TotalRecords, autoSortAndPage: false); 

    grid.Pager(WebGridPagerModes.All); 
    @grid.GetHtml(htmlAttributes: new { id="grid" }, 
      columns: grid.Columns(
      grid.Column("Date"), 
      grid.Column("Type"), 
      grid.Column("Message") 
} 
</div> 

控制器

public ActionResult Index(int? page, string sort) 
{ 
    var events = GetCollection(); 
    var startPage = 0; 
    var result = new EventListModel(); 
    if (page.HasValue && page.Value > 0) 
    { 
     startPage = page.Value - 1; 
    } 

    result.TotalRecords = events.Count(); 

    switch (sort) 
    { 
     case "Type": 
      result.Events = events.FindAll().OrderBy(p => p.Type).Skip(startPage * PageSize).Take(PageSize).ToList(); 
      break; 
     case "Message": 
      result.Events = events.FindAll().OrderBy(p => p.Message).Skip(startPage * PageSize).Take(PageSize).ToList(); 
      break; 
     case "Date": 
      result.Events = events.FindAll().OrderBy(p => p.Date).Skip(startPage * PageSize).Take(PageSize).ToList(); 
      break; 
    } 
    return View(result); 
} 

回答

2

您可以使用sortdir參數,其可能的值將是ASCDESC

public ActionResult Index(int? page, string sort, string sortdir) 
{ 
    ... 
} 

所以,你可以在控制器動作試驗參數和per的值形成相應的OrderByOrderByDescending

+0

每當我點擊一個標題列時,sortdir值仍然是相同的「ASC」 – 2011-04-16 12:43:25

+0

@Stefan P.,嗯,這很奇怪。我剛剛測試過它,參數值正確交替。 – 2011-04-16 12:44:22

+0

你是對的,它有效,我有兌現問題。感謝您幫助我。 – 2011-04-16 13:07:34