c#mvc 3,动作重载?

Pat*_*ick 9 c# overloading asp.net-mvc-3

我一直试图重载我的索引方法.

这是我的索引方法:

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

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

[ActionName("Index")]
public ActionResult IndexWithEventAndLanguage(string eventName, string language)
{
}
Run Code Online (Sandbox Code Playgroud)

这保持铸造:

控制器类型'CoreController'上当前的操作请求'Index'在以下操作方法之间是不明确的:System.Web.Mvc.ActionResult类型为ManageMvc.Controllers.CoreController的IndexDefault()System.Web.Mvc.ActionResult IndexWithEvent(System.类型为ManageMvc.Controllers.CoreController的类型为ManageMvc.Controllers.CoreController的System.Web.Mvc.ActionResult IndexWithEventAndLanguage(System.String,System.String)

是否不可能使用3种不同的GET方法重载索引操作?

此外,如果可能,那么正确的路线是什么?我有这个:

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

网址看起来像:

本地主机/核心/索引

本地主机/ EVENT_NAME /核心/索引

本地主机/ EVENT_NAME /语言/核心/索引

Jus*_*ner 13

这样的重载是行不通的.

您最好的选择是使用默认值,然后使路线值可选(就像您已经拥有它们):

public ActionResult Index(string eventName = null, string language = null)
{
}
Run Code Online (Sandbox Code Playgroud)

我不确定你是否会通过单一路线定义让路线看起来像你想要的那样.您可能需要定义三个不同的路径并将每个路径映射回单个Action方法.

  • @Patrick - 因为ASP.NET MVC无法根据您定义路由的方式决定使用哪些重载(根据URL中传递的参数调用不同的重载是不够智能的). (3认同)