2011-08-16 9 views
9

私はインデックスメソッドをオーバーロードしようとしています。ここでc#mvc 3、アクションオーバーロード?

は私のインデックスメソッドです:

[ActionName("Index")] 
public ActionResult IndexDefault() 
{ 
} 

[ActionName("Index")] 
public ActionResult IndexWithEvent(string eventName) 
{ 
} 

[ActionName("Index")] 
public ActionResult IndexWithEventAndLanguage(string eventName, string language) 
{ 
} 

これはキャストを保つ: システム:

コントローラタイプのアクション「インデックス」の現在のリクエスト「をCoreController」は、次のアクションメソッドの間であいまいです。 System.Web.Mvc.ActionResult System.Web.Mvc.ActionResult System.Web.Mvc.ActionResult(ManageMvc.Controllers.CoreController型のIndexWithEvent(System.String)システム。文字列)を入力ManageMvc.Controllers.CoreController

3つの異なるGETメソッドでインデックスアクションをオーバーロードすることはできませんか?

また、可能であれば、正しいルートは何ですか?

はlocalhost /コア/インデックス

はlocalhost/EVENT_NAME /コア/インデックス

はlocalhost/EVENT_NAME /言語/コア/インデックス:

routes.MapRoute(
       "IndexRoute", // Route name 
       "{eventName}/{language}/Core/{action}", // URL with parameters 
       new { controller = "Core", action = "Index", eventName = UrlParameter.Optional, language = UrlParameter.Optional } 
); 

URLは次のようになります。私はこれを持っています

答えて

13

このようなオーバーロードは機能しません。

あなたの最良のオプションは、オプションのルート値を(あなたはすでにそれを持っているように)なって、デフォルト値を使用することです:

public ActionResult Index(string eventName = null, string language = null) 
{ 
} 

私はあなたを見てルートを取得するつもりだか分かりません1つのルート定義で必要な方法です。おそらく、3つの異なるルートを定義し、それぞれを1つのActionメソッドにマップする必要があります。

+0

なぜこのオーバーロードは機能しませんか? – Patrick

+3

@Patrick - ASP.NET MVCでは、経路を定義した方法に基づいてどのオーバーロードを使用するかを決めることができないため、URLで渡されるパラメータに基づいてさまざまなオーバーロードを呼び出すほどスマートではありません。 –

+0

ああ、ありがとう。私はそれをあなたが提案した方法に変え、それが働いています。 – Patrick