6
[ActionName("about-us")] 
public ActionResult EditDetails(int id) 
{ 
    // your code 
} 

的行動上述作品,但我希望能夠做到相同(或相似)的控制器,即必須在網址名稱的連字符太。有沒有簡單的方法來實現這一點(我試過ActionName屬性但沒有運氣)允許在URL中連字符asp.net的MVC 2控制器名稱

回答

7
將被添加自定義路線

最簡單的方法:

routes.MapRoute("RouteName", "controler-name/{action}/{id}", new { controller = "ControllerName", action = "Index", id = "" }); 

我還沒有見過一個控制器name屬性一樣,儘管它可能是可能的。

0

也許這個作品:

public class CustomControllerFactory : DefaultControllerFactory { 

    protected override Type GetControllerType(RequestContext requestContext, string controllerName) { 
     return base.GetControllerType(requestContext, controllerName.Replace("-", "")); 
    } 
} 
3

您可以使用自定義的路由處理,給你需要的功能:

public class HyphenatedRouteHandler : MvcRouteHandler 
{ 
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_"); 
     requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_"); 

     return base.GetHttpHandler(requestContext); 
    } 
} 

和路由應該使用該處理程序進行註冊:

var route = routes.MapRoute(
    "Some Action", 
    "{controller}/{action}/{id}" 
); 

route.RouteHandler = new HyphenatedRouteHandler(); 

這裏有一個類似的問題:ASP.net MVC support for URL's with hyphens

0

路由表中的連字路由應在默認路由之前。

routes.MapRoute(
        "InformationAbout", 
        "information-about/{action}/{id}", 
        new { controller = "InformationAbout", action = "Index", id = "" } 
       ); 

routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
相關問題