2011-01-20 51 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.aspxhttp://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 - 分页

输出应该是...

艺术家 - 对于那些关于摇滚,我们向您致敬

标题 - AC/DC

流派 - 摇滚

那么分页显示在屏幕的底部 1 2 3 4 5>

但我得到的输出...

艺术家 - MvcMusicStore.Models.Artist

标题 - 对于那些关于摇滚,我们向您致敬

流派 - 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 - >查看 - >专辑类的强类型),我已经实现了下面的代码...

   @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

的问题是,流派和艺术家是实体。你可以这样创建一个视图模型:

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只支持投射实体数据模型原语类型。” ?除非你知道,否则我会通过谷歌进一步观察。 – DiscoDude 2011-01-20 21:12:21