2010-10-19 56 views
0

我正在努力爲自己的行爲選擇適當的名字。我想返回一個以行動來區分:什麼是典型的ASP.NET MVC - 控制器動作名稱約定?

  1. 創建
  2. 編輯
  3. 編輯,創建

這是我到目前爲止有:

 
Create --> Show the Empty Form for Create 
Add --> Receives data from Create and Save New Entity 
Edit --> Shows Existing Entity in a form for editing 
Update --> Saves the changes on an existing Entity 
??? --> Shows the form for either editing or creating depending on the 
      situation 
Save --> Either saves or updates the entity depending on whether the entity 
      already exists or not. 

那麼,什麼是適當的行動名稱顯示Create/Edit視圖,它將數據發送到Save

我曾考慮過CreateEdit,因爲它很清楚明確,但我不確定。有什麼建議麼?

+1

創建通常是窗體淋浴(GET)和數據接收器(POST)。 – bzlm 2010-10-19 13:16:36

+0

我已經將這些結合在重載中,並想知道這種方法是否有任何優點或缺點。 – bzarah 2010-10-19 13:21:29

+1

@bzarah缺點?不知道任何。優點?使您遵守REST標準。 – bzlm 2010-10-19 13:42:30

回答

4

我通常使用Create()來添加一個新的實體,並使用Edit()來編輯一個。

我超載GET & POST方法和添加[HttpPost]屬性的一個接收數據,例如:

public ActionResult Create() 
{ 
    // this one renders the input form 
    ... 
    return View(); 
} 

[HttpPost] 
public ActionResult Create(MyViewModel model) 
{ 
    // this one accepts the form post 
    if (ModelState.IsValid) 
    { 
     ... 
     return RedirectToAction(...); 
    } 
    return View(model); 
} 

這種約定可以很容易找到相關的方法。

+0

所以,創建(新實體),編輯(改變現有),創建/編輯 - > ??? 此外,whate是否將這些行爲合併爲一個超負荷的優點和缺點? – bzarah 2010-10-19 13:20:47

+0

如果您可以將空模型傳遞給GET方法並且可以在POST方法中檢測到實體是新的,則創建/編輯可以正常工作,例如,通過檢查零ID。然而,我的控制器方法非常小,功能也不同 - 也就是說,create方法只是將視圖模型對象映射到一個新的實體並保存,而編輯方法加載實體並僅將模型映射到實體 - 不需要以保存更新,如果您使用的是更改跟蹤ORM(如NHibernate)。 – 2010-10-19 13:33:35

+0

我們也在這裏使用NHibernate,所以保存一個新的實體並更新一個現有的實體可以用同樣的方法無縫完成。我很想談談重載「顯示」和「持續」操作方法的優缺點。我覺得每個單獨的動作名稱都會導致更清晰的API。這就是說,ASP.NET MVC已經通過ActionMethodSelectorAttributes構建了可擴展性,並且@bzlm指出這更加RESTFful。 – bzarah 2010-10-19 14:35:17