1

我有一个名为 ECommerceEntities 的实体模型,其中包含多个实体。如果我想在 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 );
}

谢谢。

4

2 回答 2

2

如果你问是否可能,两者都可以。是的,这两个选项都可以。但是,如果您只需要视图中的子实体,我只需将子实体传递到视图中。传递超过需要的东西没有用,对吧?

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

因此,这意味着如果您不小心,有人可以劫持 http 帖子并可以使用他们选择的各种随机数据填充 EcommerceEntities 及其子实体,并且您可能会不小心将这些数据保存到您的数据库中,因为您没有预料到一些设置这些属性。

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

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

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

希望这会有所帮助。

于 2012-04-05T13:50:48.207 回答
1

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

public ActionResult Index()
{
    // assumes dbContext is already initialized
    ICollection<ECommerceEntities> entities = dbContext.ECommerceEntities
    return View(entities);
}
于 2012-04-05T13:50:09.040 回答