1

我昨天以不太清楚的方式问了这个问题,并没有得到任何好的反馈,所以我再试一次......

我有一个带有相关实体的实体,可以在一页上创建、更新和删除。

在相关实体由多个成员组成的情况下,假设商店有多个产品,我使用部分视图。

所以网址是stores.com/store/edit/44

我的编辑操作抓取 id 为 44 的商店实体,然后找到商店 id 为 44 的产品...

编辑以添加控制器详细信息

public ActionResult Edit(int id = 0)
{
    store store = db.storess.Find(id);
    IList<product> product = db.products.Where(t => t.storeid == store.storeid).ToList();

    var viewModel = new vwstore();
    viewModel.store = store;
    viewModel.products = product;

    return View(viewModel);
}

结束编辑

并将其放在视图模型中......

public store store { get; set; }
public IList<product> products { get; set; }

在我看来,我强烈使用

@model myproject.viewModel.vwstores

我显示商店详细信息并运行一个 for 循环来显示这样的每个产品。

@for (var p = 0; p < Model.store.products.Count(); c++)
{
    @Html.Partial("_product", Model.product[c]);
}

请注意,我将特定产品模型传递给局部视图。

在我的部分视图中,我使用根实体类型进行强类型,而不是像上面那样使用视图模型,因为这是我需要的,也是我传递给部分的...

@model myProjectModel.product

现在我可以显示给定产品的详细信息。

所以现在这是我的问题。如果产品有自己的相关数据,例如类别怎么办?


问题

  1. 我填写了公共 IList products { get; 放; } 通过了解商店 ID。我不知道产品 ID,那么如何填写类别列表?

  2. 我的期望是我会在产品部分中嵌套一个类别部分,但是传递模型是一个问题。我需要传递带有产品和类别列表的视图模型,但是对于部分产品,只有根实体可用。

  3. 我不能通过这样的视图模型... @Html.Partial("_categories", myviewmodel.categories[c]); 它不会编译。这是 viewdatadictionary 的用途吗?

非常感谢任何和所有帮助。

4

2 回答 2

1

尝试使用调用操作方法来呈现视图的 RenderAction。使用它,您可以填充您的视图模型。

@{ Html.RenderAction("Categories", "Controller", new { productId = product.Id }); }

然后你的视图模型

public Product product {get;set;}
public IList<Category> Categories {get;set;}

控制器

public ActionResult Categories(int productId)
{
   // populate view model based on  product Id
   return PartialView("_Categories", viewmodel);

}

编辑:

或者只是将类别放在您的产品模型中

public class Product
{
   public int Id {get;set;}
   public string Name {get;set;}
   public virtual ICollection<Category> Categories {get;set;}
}

public class Category
{
   public int Id {get;set;}
   public string Name {get;set;}
   public int ProductId {get;set;}
   public virtual Product Product {get;set;}
}

这将允许您遍历产品类别:

@foreach (var category in prodocut.Categories)
{
    <td>@category.Name</td>
}
于 2013-11-08T14:12:25.080 回答
0

请参阅主要问题下方的评论

如果您的模型设置正确并且您正在使用 Include 您可以通过导航属性显示产品相关数据,只需编写 p.Category.Name 如果您想要产品的类别名称

public Product
{
   public string Name {get;set;};
   [ForiegnKey("Category")]
   public CategoryId {get;set;};

   public Category Category {get; set;}
} 

拉姆达;

db.Products.Where(x => x.ShopId == shopId).Include("Category").ToList();

或者,您正在执行数据访问。

然后,您可以访问类别数据

p.Category.Name
于 2013-11-08T14:18:57.047 回答