2014-02-07 45 views
1

如果我只對2列進行排序,在本示例中爲「Bedrag」&「Datumbetaling」,則正常排序有效。無法對MVC 4中的3列進行排序 - ASP.net

當我想在第三欄添加一個名爲「StatusBetalingID」的排序時,那麼它只會按降序排列,如果我點擊列,如果再次點擊此列,它不會按升序排序。 當我不斷點擊前兩列「Bedrag」&「DatumBetaling」,然後它保持排序升序&降序。

這是我在控制器代碼:

public ActionResult Index(string sortBy) 
{ 
    ViewBag.SortBedragParameter = string.IsNullOrEmpty(sortBy) ? "Bedrag_desc" : ""; 
    ViewBag.SortDatumParameter = sortBy == "DatumBetaling" ? "DatumBetaling_desc" : "DatumBetaling"; 
    ViewBag.SortStatusParameter = sortBy == "StatusBetaling" ? "stat" : "Status_desc"; 
    var betalingen = betalingBLL.GetAll(); 
    switch (sortBy) 
    { 
     case "Bedrag_desc": 
       betalingen = betalingen.OrderByDescending(x => x.Bedrag); 
       break; 
     case "DatumBetaling_desc": 
       betalingen = betalingen.OrderByDescending(x => x.DatumBetaling); 
       break; 
     case "DatumBetaling": 
       betalingen = betalingen.OrderBy(x => x.DatumBetaling); 
       break; 
     case "Status_desc": 
       betalingen = betalingen.OrderByDescending(x => x.StatusBetalingID); 
       break; 
     case "stat": 
       betalingen = betalingen.OrderBy(x => x.StatusBetalingID); 
       break; 
     default: 
       betalingen = betalingen.OrderBy(x => x.Bedrag); 
       break; 
    } 
    return View(betalingen.ToList()); 
} 

這裏是視圖代碼:

<th> <%: Html.ActionLink("Status Betaling", "Index", new { sortBy = ViewBag.SortStatusParameter}) %> </th> 
<th> <%:Html.ActionLink("Datum Betaling", "Index", new { sortBy = ViewBag.SortDatumParameter}) %> </th> 
<th> <%:Html.ActionLink("Bedrag", "Index", new { sortBy = ViewBag.SortBedragParameter }) %> </th> 

所以它的實際工作,排序,但我不知道該怎麼用第三個參數/列來解決問題,繼續對這個問題進行排序。

+0

你用排序客戶端的東西可能會更好。我用過[tablesorter](http://tablesorter.com/docs/),效果很好。爲您的控制器節省大量回調。 – James

回答

2

的原因是sortby永遠等於StatusBetaling(爲什麼會),因此這條線將總是被設置爲Status_desc

ViewBag.SortStatusParameter = sortBy == "StatusBetaling" ? "stat" : "Status_desc"; 

下面的代碼應該這樣做:

ViewBag.SortBedragParameter = string.IsNullOrEmpty(sortBy) ? "Bedrag_desc" : ""; 
    ViewBag.SortDatumParameter = sortBy == "DatumBetaling" ? "DatumBetaling_desc" : "DatumBetaling"; 
    ViewBag.SortStatusParameter = sortBy == "StatusBetaling" ? "Status_desc" : "StatusBetaling"; 
    var betalingen = betalingBLL.GetAll(); 
    switch (sortBy) 
    { 
     case "Bedrag_desc": 
       betalingen = betalingen.OrderByDescending(x => x.Bedrag); 
       break; 
     case "DatumBetaling_desc": 
       betalingen = betalingen.OrderByDescending(x => x.DatumBetaling); 
       break; 
     case "DatumBetaling": 
       betalingen = betalingen.OrderBy(x => x.DatumBetaling); 
       break; 
     case "Status_desc": 
       betalingen = betalingen.OrderByDescending(x => x.StatusBetalingID); 
       break; 
     case "StatusBetaling": 
       betalingen = betalingen.OrderBy(x => x.StatusBetalingID); 
       break; 
     default: 
       betalingen = betalingen.OrderBy(x => x.Bedrag); 
       break; 
    } 
    return View(betalingen.ToList());