Asp.net mvc ASP.NET MVC从IEnumerable类型渲染局部视图<;购物车>;IEnumerable类型的内部视图<;产品>;

Asp.net mvc ASP.NET MVC从IEnumerable类型渲染局部视图<;购物车>;IEnumerable类型的内部视图<;产品>;,asp.net-mvc,asp.net-mvc-4,partial-views,asp.net-mvc-partialview,Asp.net Mvc,Asp.net Mvc 4,Partial Views,Asp.net Mvc Partialview,编辑:产品视图包含一些产品,因此我尝试使用每个产品的按钮将它们逐个添加到购物车中,添加的产品将显示在部分视图(购物车)中的一个表中,工作正常,我现在尝试在弹出模式中呈现这个购物车,所以当我按下弹出按钮时,它应该会显示我添加的产品,而我仍然在产品视图中 我试着在模态体内做类似的事情: @Html.Partial("_ShowCart", new List<InternetApp.Models.Cart>()) 我有3个模型:产品、购物车和视图模型: public class Prod

编辑:产品视图包含一些产品,因此我尝试使用每个产品的按钮将它们逐个添加到购物车中,添加的产品将显示在部分视图(购物车)中的一个表中,工作正常,我现在尝试在弹出模式中呈现这个购物车,所以当我按下弹出按钮时,它应该会显示我添加的产品,而我仍然在产品视图中

我试着在模态体内做类似的事情:

@Html.Partial("_ShowCart", new List<InternetApp.Models.Cart>())
我有3个模型:产品、购物车和视图模型:

public class Product
{
    public int id { get; set; }
    public String name { get; set; }
    public float price { get; set; }
    public String image { get; set; }
    public String description { get; set; }
    public int? CategoryId { get; set; }
}

public class Cart
{
    public int product_id { get; set; }
    public DateTime added_at { get; set; }
    public virtual Product product { get; set; }
}

public class ProductCart
{
    public Product Product { get; set; }
    public Cart Cart { get; set; }
}
购物车和产品每个都有控制器,我把购物车作为一个局部视图,采用
IEnumerable
和一个产品视图,采用
IEnumerable

这是购物车索引操作

public ActionResult Index()
{
    List<Cart> Cart = db.Cart.Include(a => a.product).ToList();
    return PartialView("_ShowCart", Cart);
}
public ActionResult Index()
{
List Cart=db.Cart.Include(a=>a.product.ToList();
返回PartialView(“\u ShowCart”,Cart);
}
我不知道如何在产品中呈现购物车,因为每个购物车都有不同的
IEnumerable
模型…

您的实体框架(EF)模型如下所示。我仅出于建议的标准化和清晰性目的进行了修改:

public class Product
{
    [Key] //This is only needed by EF if you don't call the primary key "Id".
    public int Id { get; set; }
    public String Name { get; set; }
    public float Price { get; set; }
    public String Image { get; set; }
    public String Description { get; set; }
    //Add any additional properties.
}

public class Cart
{
    [Key]
    public int Id { get; set; }
    //Add any additional properties
}

public class CartProduct
{
    [Key]
    public int Id { get; set; }
    public int CartId {get; set; } //References Id property in Cart entity.
    public int ProductId {get; set; } //References Id property in Product entity.
    public DateTime AddedAt { get; set; }

    //These are navigation properties.  
    //The foreign key attribute lets EF know what property to reference
    [ForeignKey("CartId")]
    public virtual Cart Cart { get; set; }

    [ForeignKey("ProductId")]
    public virtual Product Product { get; set; }
}
您应该创建一组单独的模型。EF模型应仅用于表示数据库表和属性。将这些模型与EF模型分开放置。。。可能是一个ViewModel文件夹

    public class CartProductsViewModel
    {
        public int CartId { get; set; } //Persist the cart you are adding to.
        public IEnumerable<ProductModel> Products {get; set; } //Available products

        public class ProductModel
        {
            public int Id { get; set; }
            public String Name { get; set; }
            public float Price { get; set; }
            public String Image { get; set; }
            public String Description { get; set; }
            //Add any additional properties.
         }

    }
在返回中,我没有指定viewModel名称。只有遵循MVC指导原则并将视图命名为与调用方法相同的名称(在本例中为index.cshtml)时,才能实现这一点。并在顶部添加以下内容:

@model CartProductsViwModel //may need to be fully qualified (add namespace).
您应该能够循环此模型中的产品以在表中显示。这避免了必须处理单独的产品和购物车视图。至于将产品添加到视图,这可以在客户端完成。我建议您首先尝试让它工作起来,然后您可以创建一个专门用于客户端工作的新问题

如果您确实需要一个对话框,您可以查找JQuery对话框。

然后,您将需要执行ajax调用来发布添加的产品和cartId。方法是这样的

[HttpPost]
public JsonResult AddProductToCart(int cartId, ProductModel product) {}

这也是一个单独的问题。我希望这能帮助你开始

您应该将数据映射到viewModel,然后将viewModel绑定到视图。你能准确地解释一下你想在视图中显示什么吗?如果可能的话,请提供您当前正在尝试的内容。@StephenRaman好的,我编辑了它,请再次检查,当我在两个视图中循环使用viewmodel以列出产品时,如何使用viewmodel?
@model CartProductsViwModel //may need to be fully qualified (add namespace).
[HttpPost]
public JsonResult AddProductToCart(int cartId, ProductModel product) {}