我一直在看这个问题大约两个星期了,并且认为是时候我会寻求帮助......
我正在尝试在第8部分中使用MVCMusicStore购物车教程:http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-8。我的项目的主要区别在于我使用的是Database First(而不是Code First,用于实时/托管数据库的MVC实践)。
班级代码:
public partial class Cart
{
public int RecordId { get; set; }
public string CartId { get; set; }
public int AlbumId { get; set; }
public Nullable<int> Count { get; set; }
public Nullable<System.DateTime> DateCreated { get; set; }
public virtual Album Album { get; set; }
}
public partial class Album
{
public int AlbumId { get; set; }
public Nullable<int> GenreId { get; set; }
public Nullable<int> ArtistId { get; set; }
public string Title { get; set; }
public Nullable<decimal> Price { get; set; }
public string AlbumArtUrl { get; set; }
public virtual Genre Genre { get; set; }
public virtual Artist Artist { get; set; }
}
public class ShoppingCartViewModel
{
public List<Cart> CartItems { get; set; }
public decimal CartTotal { get; set; }
}
在ShoppingCartViewModel中填充CartItems的函数:
public List<Cart> GetCartItems()
{
return db.Carts.Where(cart => cart.CartId == ShoppingCartId).ToList();
}
.cshtml页面:
@model BoothPimps.ViewModels.ShoppingCartViewModel
@foreach (var item in Model.CartItems)
{
<tr id="row-@item.RecordId">
<td>
@Html.ActionLink(item.Album.Title, "Details", "Store", new { id = item.AlbumId }, null)
</td>
</tr>
}
这是Model.CartItems的图像,除了链接的Album数据外,还填充了所有内容: http://s1253.photobucket.com/albums/hh585/codingcoding1/?action=view¤t=image1.jpg (项目名称在任何地方被删除)
此处的代码错误:
@Html.ActionLink(item.Album.Title, "Details", "Store", new { id = item.AlbumId }, null)
问题:item.Album始终为null。
Album.AlbumId = Cart.AlbumId应该将相册数据链接到购物车,这样它就不会返回null但它不起作用。在之前的教程中,当我做同样的事情但是从Album获取Genre或Artist数据时,链接的数据可以工作,我能够检索这些值,如下所示:
@Html.DisplayFor(model => model.Genre.Name)
@Html.DisplayFor(model => model.Artist.Name)
那怎么来model.Genre和model.Artist返回值但是item.Album是null?我不是使用“virtual”关键字以相同的方式链接这些值吗?我错过了什么?
感谢您查看此内容。
答案 0 :(得分:0)
你有没有机会在购物车中确实有一个项目,因为它的专辑是空的?
尝试在此操作结束时放置断点,并检查模型的组成部分。
使用调试器查找不再有item.Album的点,同时确保检查数据库中是否有没有Album的项目。 一旦你知道错误来自哪里,你很可能能够解决它,但如果没有,请在此发布你的发现。
答案 1 :(得分:0)
想出来。
myProject.Context.cs(从.edmx文件生成)在Web.Config文件中生成了新的connectionString信息,我不得不在我的代码中引用它。我的不正确的代码实际上使用的是较旧版本的Entities对象,应该指向新的。
private Entities = new Entities();
// private MyProjectDb = new MyProjectDb();
由于MVC音乐商店教程使用了Code First和伪数据,因此出现了混乱,所以我没有意识到我必须在以后更改这段代码。