0

我已经研究这个问题大约两个星期了,我认为是时候寻求帮助了......

我正在尝试让 MVCMusicStore 购物车教程在第 8 部分工作:http ://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-8 。我的项目的主要区别在于我使用的是数据库优先(而不是代码优先,用于使用实时/托管数据库的 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 的图像,除了链接的专辑数据之外的所有内容都填充: 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 始终为空。

Album.AlbumId = Cart.AlbumId 应该将专辑数据链接到购物车,这样它就不会返回 null 但它不起作用。然而,在以前的教程中,当我做同样的事情,但要从专辑中获取流派或艺术家数据时,链接数据有效,我能够检索这些值,如下所示:

@Html.DisplayFor(model => model.Genre.Name)
@Html.DisplayFor(model => model.Artist.Name)

那么为什么 model.Genre 和 model.Artist 返回值但 item.Album 为空呢?我不是使用“虚拟”关键字以相同的方式链接这些值吗?我错过了什么?

谢谢你看看这个。

4

2 回答 2

0

您是否真的有可能在购物车中有一个项目,因为它的专辑是空的?
尝试在此操作的末尾放置一个断点,并检查您的模型包含什么。

使用调试器找到没有更多 item.Album 的点,还要确保检查您的数据库中是否有任何没有专辑的项目。一旦您知道错误来自哪里,您很可能能够修复它,但如果没有,请在此处发布您的发现。

于 2012-07-17T05:45:36.563 回答
0

弄清楚了。

myProject.Context.cs(从 .edmx 文件生成)在 Web.Config 文件中生成了新的 connectionString 信息,我必须在我的代码中引用它。我的错误代码实际上是使用旧版本的实体对象,应该指向新版本。

private Entities = new Entities();
// private MyProjectDb = new MyProjectDb();

由于 MVC Music Store 教程使用 Code First 和假数据,因此产生了混淆,所以直到后来我才意识到我必须更改这段代码。

于 2012-07-18T05:16:23.320 回答