通过EntityModel在asp.net mvc中查看?
问题描述:
我有一个名为ECommerceEntities的EntityModel包含几个实体。如果我想在asp.net mvc的视图中使用这个模型,我可以通过ECommerceEntities实例来查看,或者我可以通过ECommerceEntities中的一个实体。通过EntityModel在asp.net mvc中查看?
我的意思是:
//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);
}
感谢。
答
如果你问这是可能的,这是可能的。是的,这两个选项都可以工作。但是,如果您只需要视图中的子实体,则只需将该子实体传递到视图中即可。没有用途超过需要的权利?
不要忘记,在MVC中传递给视图的任何对象(例如EcommerceEntities)都可以通过MVC的自动模型绑定在帖子中设置其属性,该自动模型绑定将来自帖子的数据映射到传递到视图。
所以,这意味着某人可以劫持http post,并且可以用他们选择的各种随机数据位填写EcommerceEntities及其子实体,如果您不小心,并且您可能会意外地将此数据保存到您的数据库中,因为您没想到这些属性中的一些会被设置。
因此,在MVC中工作时,您必须保护未在视图中使用的属性,但传递到视图中以确保没有人注入它们。
如果您决定通过EcommerceEntities,请确保您使用白名单或查看MVC的绑定属性,以便在您的实体回发到您的控制器时保护您的数据。
由于涉及保护那么多额外数据的工作,我会说如果屏幕正确地填充子实体对象,那么子实体将是最好的。
希望这是有帮助的。
答
如果要显示所有实体的列表(Index操作通常用于),你可能想从你的数据库环境得到所有的实体:
public ActionResult Index()
{
// assumes dbContext is already initialized
ICollection<ECommerceEntities> entities = dbContext.ECommerceEntities
return View(entities);
}
这也是我的问题的答案和安全建议。非常感谢。 – 2012-04-05 13:57:28
你很欢迎:) – Matt 2012-04-05 14:00:12