2012-04-02 54 views
0

我有一個可以通過以下三種途徑一個觀點:ASP.NET允許的操作命名?

1.空形式 - 從菜單初始獲取

[HttpGet] 
public ActionResult GetMe() 

2.表格後填充的形式提交(下拉值後被選中)

[HttpPost] 
public ActionResult GetMe(int firstDropdownValue) 

3.通過javascript從另一頁面的請求後填充的。這是一個GET。

[HttpGet] 
public ActionResult GetMe(int secondDropdownValue, int thirdDropdownValue) 

的問題是,#3#與1因爲有兩個到達同一個ActionName衝突是不允許的。我可以給#3一個不同的動作名稱,但我真的很想在URL中顯示相同的名稱。

我已經看過[ActionName]屬性,但我不認爲它可以幫助我。有沒有解決方法?

+1

你的例子不會編譯。 #2和#3具有相同的方法簽名。 – 2012-04-02 22:56:15

+0

我編輯了#3以使簽名不同。這裏的參數並不重要。 – Dewey 2012-04-03 13:31:40

回答

0

@Andrew Barber是對的。忘記MVC一秒鐘,你不能有兩個具有相同簽名的方法。它們可以合併爲一個。

[HttpGet] 
public ActionResult GetMe() 

[HttpPost] 
[ActionName("GetMe")] 
public ActionResult GetMeHttpPost(int dropDownValue) 

當然,這意味着你需要改變你的第三個選項(JS)做一個POST而非GET來。如果這是一個問題,則需要使用單獨URL的第三個操作。

儘管我沒有設想JavaScript需要「獲取」整個頁面的場景 - 不應該是返回PartialViewResult的子操作嗎?

0

修復編譯錯誤後,可以將#1和#3與可爲空的int組合。

[HttpGet] 
public ActionResult GetMe(int? dropDownValue)