2011-01-20 2 views
1

Это сообщение относится к MVC MusicStore, MVC 3, которое свободно доступно с сайта MSDN Я не уверен, что это проблема в файле cshtml или в файле cs. В основном я пытаюсь реализовать разбиение на страницы для StoreManagerController. Я посмотрел http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/,http://weblogs.asp.net/rajbk/archive/2010/05/08/asp-net-mvc-paging-sorting-filtering-using-the-mvccontrib-grid-and-pager.aspx и http://weblogs.asp.net/shijuvarghese/archive/2010/10/08/using-the-webgrid-helper-in-asp-net-mvc-3-beta.aspx Я не получаю правильный результат. Может ли кто-нибудь мне помочь? Я думаю, что в этом что-то делать с классом в storemanagercontroller, или, возможно, мне нужно создать класс antother, или, может быть, в @model IEnumerable, имея в виду, что у меня есть файл Helper.cs?mvc 3 musicstore - storemanagercontroller - pagination

Выход должен быть ...

Исполнитель - Для тех, кто собирается Rock Мы Salute You

Заголовок - AC/DC

Жанр - Рок

и т.д.

то в нижней части экрана отображается разбивка на страницы 1 2 3 4 5>

Но я получаю выход ...

Исполнитель - MvcMusicStore.Models.Artist

Название - Для тех, кто собирается Rock Мы Salute You

Жанр - MvcMusicStore.Models.Genre

и т.д.

то разбиение на страницы показывает в нижней части экрана 1 2 3 4 5>

синтаксис StoreManagerController является

     public ActionResult Index() 
          { 
          var albums = storeDB.Albums 
          .Include("Genre").Include("Artist") 
          .ToList(); 
          return View(albums); 
          } 

В cshtml (StoreManagerController -> view-> класс Альбом, как сильно типизированных) Я осуществил следующий код ...

   @model IEnumerable<MvcMusicStore.Models.Album> 
       @{ 
       ViewBag.Title = "Index"; 
       } 
       <h2>Index</h2> 
       @Html.ActionLink("Create New", "Create") 
       @{   
       var grid = new WebGrid(source: Model, 
       defaultSort: "Artist", 
       rowsPerPage: 10); 
       } 

      <div id="grid"> 
       @grid.GetHtml(
       tableStyle: "grid", 
       headerStyle: "head", 
       alternatingRowStyle: "alt", 
       columns: grid.Columns(
       grid.Column("Artist"), 
       grid.Column("Title"), 
       grid.Column("Genre") 
       ) 

      ); // ; was missing. 

ответ

1

Проблема заключается в том, что жанр и Исполнитель - сущности. Вы можете создать ViewModel, как это:

public class AlbumViewModel 
    {   
     public string Artist { get; set; } 
     public string Title { get; set; } 
     public string Genre { get; set; } 
    } 

и чем заполнить его внутри контроллера, как это:

var albums = from a in storeDB.Albums 
      select new AlbumViewModel{ 
         Artist = a.Artist.Name, 
         Title = a.Title, 
         Genre = a.Genre.Name }; 

и не забудьте установить тип модели в представлении:

@model IEnumerable<MvcMusicStore.Models.AlbumViewModel> 
+0

Спасибо за ваш ответ frennky. Следующей ошибкой, которую я получаю, является «System.NotSupportedException: невозможно записать тип« MvcMusicStore.Models.AlbumViewModel »для ввода« MvcMusicStore.Models.AlbumViewModel ». LINQ to Entities поддерживает только приведение примитивных типов данных Entity Data Model». ? Я смотрю на это Google, если не знаю. – DiscoDude

+0

, что не имеет смысла, это работает для меня. пожалуйста, укажите более подробную информацию. – frennky

+0

Ошибка указана на - @ grid.GetHtml ( – DiscoDude