2012-04-05 270 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); 
}