我正在尝试开始学习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
的模型项。
答案 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>