2012-04-05 213 views
1

我有一个名为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); 
} 

感谢。

回答

2

如果你问这是可能的,这是可能的。是的,这两个选项都可以工作。但是,如果您只需要视图中的子实体,则只需将该子实体传递到视图中即可。没有用途超过需要的权利?

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

所以,这意味着某人可以劫持http post,并且可以用他们选择的各种随机数据位填写EcommerceEntities及其子实体,如果您不小心,并且您可能会意外地将此数据保存到您的数据库中,因为您没想到这些属性中的一些会被设置。

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

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

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

希望这是有帮助的。

+0

这也是我的问题的答案和安全建议。非常感谢。 – 2012-04-05 13:57:28

+1

你很欢迎:) – Matt 2012-04-05 14:00:12

1

如果要显示所有实体的列表(Index操作通常用于),你可能想从你的数据库环境得到所有的实体:

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