2015-11-30 3 views
1

Я стараюсь сортировать результаты поиска по автору по фамилии, дате публикации (новые и старые), названию, самым популярным и самым высоким рейтингам!Сортировка/Фильтрация MVC

Я использовал пример n и почти скопировал его дословно, но это не сработает для меня ... любые предложения о том, что я делаю неправильно?

Вот мой код контроллера:

public ActionResult Index(string sortOrder) 
    { 
     ViewBag.LastNameParam = String.IsNullOrEmpty(sortOrder) ? "name" : ""; 
     ViewBag.NewestDateParam = sortOrder == "Date" ? "date_desc" : "Date"; 
     ViewBag.OldestDateParam = sortOrder == "date_desc"; 
     ViewBag.TitleParam = sortOrder == "title"; 
     ViewBag.RatingParam = sortOrder == "highest_rated"; 
     ViewBag.MostPopularParam = sortOrder == "most_popular"; 

     var books = from b in db.Books 
        select b; 

     switch (sortOrder) 
     { 
      case "name": 
       books = books.OrderBy(s => s.BookAuthorLastName); 
       break; 
      case "title": 
       books = books.OrderBy(s => s.BookTitle); 
       break; 
      case "date": 
       books = books.OrderBy(s => s.BookPublicationDate); 
       break; 
      case "date_desc": 
       books = books.OrderByDescending(s => s.BookPublicationDate); 
       break; 
      case "highest_rated": 
       books = books.OrderBy(s => s.BookRating); 
       break; 
      case "most_popular": 
       books = books.OrderBy(s => s.BookRating); 
       break; 
      default: 
       books = books.OrderBy(s => s.BookAuthorLastName); 
       break; 
     } 

     return View(db.Books.ToList()); 
    } 

Вот мой взгляд код:

@model IEnumerable<FinalProject_Lio_Lopez_Jafri_Wood.Models.Book> 
@using FinalProject_Lio_Lopez_Jafri_Wood.Models; 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>List of All Books</h2> 

<div class="row"> 
    <table class="table table-hover"> 
     <thead> 
      <tr> 
       <th> @Html.ActionLink("Book Title", "Index", new { sortOrder = ViewBag.TitleParam })</th> 
       <th>Author First Name</th> 
       <th> @Html.ActionLink("Author Last Name", "Index", new {sortOrder = ViewBag.LastNameParam}) </th> 
       <th> Unique Number</th> 
       <th> Amount in Stock</th> 
       <th> @Html.ActionLink("Rating", "Index", new { sortOrder = ViewBag.RatingParam }) </th> 
       <th> @Html.ActionLink("Total # of Purchases", "Index", new { sortOrder = ViewBag.MostPopularParam }) </th> 
       <th>@Html.ActionLink("Publication Date", "Index", new {sortOrder = ViewBag.NewestDateParam})</th> 
      </tr> 
     </thead> 


     @foreach (var item in Model) 
     { 
      <tr> 
       <td>@Html.ActionLink(item.BookTitle, "Details", new { id = item.BookID })</td> 
       <td>@item.BookAuthorFirstName</td> 
       <td>@item.BookAuthorLastName</td> 
       <td>@item.BookID</td> 
       <td>@item.BookAmountInStock</td> 
       <td>@item.BookRating</td> 
       <td>@item.BookPopularity</td> 
       <td>@item.BookPublicationDate</td> 
      </tr> 
     } 
     </table> 
    </div> 
+0

Что не работает? Получаете ли вы какие-либо ошибки? Возможно, вы неправильно скопировали «most_popular», так как он имеет ту же логику, что и «high_rated», и вместо этого он должен использовать BookPopularity. –

+0

Это просто не нравится! Ничего не происходит, когда я нажимаю на гиперссылку. Я не получаю никаких ошибок: (( –

+0

Неужели u начал отладчик? – moji

ответ

0

Вашего Index() только возвращение несортированных коллекций (после получения коллекции, а затем сортировка, вы бросьте его удалите и снова вызовите базу данных, используя return View(db.Books.ToList());, которая возвращает несортированную коллекцию.

Изменить последнюю строку ваш код на

return View(books); 
+0

Это сработало. Большое вам спасибо! –

Смежные вопросы