2009-10-27 78 views
1

我很喜歡ASP.NET MVC。避免FormCollection for ASP.NET MVC的方法?

我正在查看ASP.NET MVC加載項的入門示例。

我看到自動生成了這樣的事情:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(int id, FormCollection collection) 
{ 
    try 
    { 
     // TODO: Add update logic here 
     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

我覺得這是很臭,因爲我想使用實體框架,實體狀態將被保存。我想類似的東西:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(Person person) 
{ 
    try 
    { 
     // TODO: Add update logic here 
     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

通知我拿出的FormCollection與Person類取而代之。 - 我想避免使用魔術字符串。 - 保存實體狀態。 - 更明確。

這甚至可能嗎?

/MVC與

回答

3

是的,這是可能的!您表單的元素將需要與您要表示的模型的屬性具有相同的名稱。這個過程被稱爲綁定,如果您查看ModelBinder對象,您可以發現更多。

欲瞭解更多信息,請看看這個問題:ASP.NET MVC example of editing multiple child records

+0

驚人的,我的代碼張貼作爲猜測工作幾乎是(幸運猜測)...無論如何,我發現這篇文章也有幫助: http://odetocode.com/Blogs/scott/archive/2009/04/27/6-tips-for- ASP淨MVC模型,binding.aspx – vidalsasoon 2009-10-28 12:46:35

2

是困惑,雖然我強烈建議使用專用的演示/編輯模型,而不是使用您的實體。儘管如此,如果您的表單中有足夠的信息填充全部Person的不可清空屬性,那麼您顯示的內容將起作用。

+0

我的確意識到這一點很重要:P http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx – vidalsasoon 2009-10-28 14:02:22