mvc无法从控制器调用视图

时间:2012-05-24 22:03:30

标签: c# asp.net-mvc

我正在尝试开始学习MVC。我构建了我在Microsoft站点上找到的MVC音乐商店项目。 http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-1

我工作得很好但是当我尝试修改它时遇到了麻烦。我想将数据放在一个单独的项目中。我使用Linq to Entities进行数据访问。

这是我的类访问数据

public class clsUtilities
{
    Utilities.MVCMusicStoreEntities db = new Utilities.MVCMusicStoreEntities();

    public object GetAlbums(string GenreName)
    {
        var query = from tags in db.vieAlbumArtists
                    where tags.GenreName.Equals(GenreName)
                    select tags;

        return query;
    }
}

在我的控制器中,我的代码是

public ActionResult Browse2(string genre)
{
    // retrieve Genre and its associated albums from the database

    var genreModel = mcloUtilities.GetAlbums(genre);

    return View(genreModel);
}

我在视图中生成了一个cshtml文件

@model Utilities.vieAlbumArtist

@{
    ViewBag.Title = "Browse2";
}

这一切都可以编译好但是当我运行它时我得到:

传递到字典中的模型项的类型为System.Data.Objects.ObjectQuery'1[Utilities.vieAlbumArtist],但此字典需要类型为Utilities.vieAlbumArtist的模型项。

4 个答案:

答案 0 :(得分:1)

更改

@model Utilities.vieAlbumArtist

@model IEnumerable<Utilities.vieAlbumArtist>

您将返回vieAlbumArtist列表,而不只是单个实例。

您可能还想更改

public object GetAlbums(string GenreName)

public IEnumerable<Utilities.vieAlbumArtist> GetAlbums(string GenreName)

传递objects不是最好的主意。

答案 1 :(得分:0)

这是你的问题:

public object GetAlbums(string GenreName)

您将数据作为对象返回。但视图期望收到Utilities.vieAlbumArtist类型的项目。更改GetAlbums()方法以返回适当的类型,或确保将其在控制器中转换为视图所期望的类型。

答案 2 :(得分:0)

我能够在你们给我的提示的帮助下解决这个问题。

来自clsUtilies

  public class clsUtilities
    {
        Utilities.MVCMusicStoreEntities db = new Utilities.MVCMusicStoreEntities();

        public IEnumerable<Utilities.vieAlbumArtist> GetAlbums(string GenreName)
        {




        IEnumerable<vieAlbumArtist> query = from tags in db.vieAlbumArtists
                    where tags.GenreName.Equals(GenreName)

                    select tags;

            foreach (var n in query)
            {

            }

        return query;

        }

来自控制器

 public ActionResult Browse2(string genre)
        {
            // retrieve Genre and its associated albums from the database


            var genreModel = mcloUtilities.GetAlbums(genre);


            return View(genreModel );
        }

来自观点

@model IEnumerable< Utilities.vieAlbumArtist> 


@{
    ViewBag.Title = "Browse Albums";
}





@foreach(var album in Model) 
{ 
   <ul>  
       <a href="@Url.Action("Details", new { id=album.AlbumId})">
       <img alt="@album.Title" src="@album.AlbumArtUrl" />
       <span>@album.Title (   @album.Name ) </span> </a>
       </ul>
} 











}

答案 3 :(得分:-1)

要显示相册列表,请尝试以下操作:

<ul>
@foreach(var item in vieAlbumArtist)
{
   <li>item.Name</li> //Not sure if you actually have a name property
}
</ul>