传递EntityModel在asp.net mvc中查看?

时间:2012-04-05 13:43:17

标签: asp.net-mvc entity-framework ado.net

我有一个名为ECommerceEntities的EntityModel,它包含多个实体。如果我想在asp.net mvc的视图中使用此模型,我可以通过ECommerceEntities实例来查看,或者我可以在ECommerceEntities中传递一个实体。

我的意思是:

//Can I use this?
public ActionResult Index()
{
   ECommerceEntities entity = new ECommerceEntities();
   return View(entity);
}

//Should I use this?
public ActionResult Index()
{
   ECommerceEntities.OneEntity one_entity = new ECommerceEntities.OneEntity();

   //filling one_entity here and then send to view

   return View(one_entity );
}

感谢。

2 个答案:

答案 0 :(得分:2)

如果您询问是否可能,可以同时执行这两项操作。是的,两种选择都有效。但是,如果您只需要视图中的子实体,我只需将子实体传递给视图。没有必要通过超过需要的权利?

不要忘记在MVC中你传入视图的任何对象(例如EcommerceEntities)可以通过MVC的自动模型绑定在帖子中设置其属性,该绑定将数据从帖子映射到您传递到视图的对象中。

所以,这意味着有人可以劫持http帖子并且可以使用他们选择的各种随机数据填写EcommerceEntities及其子实体,如果你不小心,你可能会意外地将这些数据保存到你的数据库,因为你做了不要指望一些这些属性得到设定。

因此,在MVC中工作时,您必须保护视图中未使用但已传递到视图中的属性,以确保没有人注入它们。

如果您决定传入EcommerceEntities,请确保在将实体发回控制器时使用白名单或查看MVC的bind属性来保护您的数据。

由于保护这么多额外数据所涉及的工作,我想说如果屏幕只是在子实体对象之外正确填充,那么子实体将是最好的。

希望这很有帮助。

答案 1 :(得分:1)

如果要显示所有实体的列表(通常用于索引操作),您可能希望从数据库上下文中获取所有实体:

public ActionResult Index()
{
    // assumes dbContext is already initialized
    ICollection<ECommerceEntities> entities = dbContext.ECommerceEntities
    return View(entities);
}