我昨天以一种不太清楚的方式问这个问题并没有得到任何好的反馈,所以我再试一次......
我有一个具有相关实体的实体,可以在一个页面上创建,更新和删除。
如果相关实体由多个成员组成,那么让我们说具有多个产品的商店,我使用部分视图。
所以网址是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]);
}
注意我将特定产品型号传递给局部视图。
在我的局部视图中,我使用root实体类型的强类型,而不是像我上面那样的视图模型,因为这就是我需要的东西,这就是我传递给部分...
@model myProjectModel.product
现在我可以显示给定产品的详细信息。
所以现在这是我的问题。如果产品有自己的相关数据,例如类别?
,该怎么办?问题
我填写了公共IList产品{get;组;通过了解商店ID。我不知道产品ID,所以如何填写类别列表?
我的期望是我会在产品部分中嵌入一个类别部分,但是传递模型是一个问题。我需要传递一个带有产品和类别列表的viewmodel,但是如果产品是partial,则只有root实体可用。
我无法传递像这样的视图模型...... @ Html.Partial(“_ categories”,myviewmodel.categories [c]); 它不会编译。这是viewdatadictionary的用途吗?
非常感谢任何和所有帮助。
答案 0 :(得分: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>
}
答案 1 :(得分:0)
请参阅以下主要问题的评论
如果您正确设置了模型并且使用了Include,则可以通过简单编写p.Category.Name来显示与产品相关的数据,如果您想要产品的类别名称
public Product
{
public string Name {get;set;};
[ForiegnKey("Category")]
public CategoryId {get;set;};
public Category Category {get; set;}
}
的Lamda;
db.Products.Where(x => x.ShopId == shopId).Include("Category").ToList();
或者您正在进行数据访问。
然后,您可以使用
访问类别数据p.Category.Name