2011-09-19 234 views
1

我有一個回發動作控制器:參數傳遞給控制器​​動作

[HttpPost] 
public ActionResult test(string x) { ... } 

,我想添加一個GET操作具有相同簽名:

public ActionResult test(string y) { ... } 

但是編譯器pukes:

Type 'TestController' already defines a member called 'test' with 
the same parameter types 

所以我想改簽名:

public ActionResult test(RouteValueDictionary args) { ... } 

並調用它是這樣的:

@{ 
    RouteValueDictionary args = new RouteValueDictionary(
     new { y = "test" } 
    ); 
} 
@Html.Action("test", "TestController", args) 

但所述控制器接收args爲空。顯然我不明白這應該如何工作。我知道我可以重命名該動作,但我想知道如何聲明它,以便我的字典能夠通過。

TIA - 電子

回答

6

可以保留簽名,只是改變了方法的名稱,而是通過指定ActionNameAttribute使用相同的動作名稱。

例如

[HttpGet] 
public ActionResult Foo(FooModel model) 
{ 
    // do stuff 
} 

[HttpPost] 
[ActionName("Foo")] 
public ActionResult FooPost(FooModel model) 
{ 
    // do stuff 
} 

的方法名稱不同,但MVC動作是兩個相同的: 「foo」 的。

+2

我更喜歡在帖子模型中添加一個FormCollection參數,如果它們是完全相同的簽名,以便我不必擔心將來可能會改變的魔術字符串:) – Buildstarted

+0

@BuildStarted放棄由於該字符串的模型綁定似乎是一個特殊的選擇,因爲動作名稱已被指定爲字符串遍佈整個地方:在視圖,重定向,路由等等中。 – Jay

+0

不,我不會放棄它 - 我只是*添加* FormCollection的參數,使簽名不同:) – Buildstarted

相關問題