[ActionName("about-us")]
public ActionResult EditDetails(int id)
{
// your code
}
的行動上述作品,但我希望能夠做到相同(或相似)的控制器,即必須在網址名稱的連字符太。有沒有簡單的方法來實現這一點(我試過ActionName屬性但沒有運氣)允許在URL中連字符asp.net的MVC 2控制器名稱
[ActionName("about-us")]
public ActionResult EditDetails(int id)
{
// your code
}
的行動上述作品,但我希望能夠做到相同(或相似)的控制器,即必須在網址名稱的連字符太。有沒有簡單的方法來實現這一點(我試過ActionName屬性但沒有運氣)允許在URL中連字符asp.net的MVC 2控制器名稱
最簡單的方法:
routes.MapRoute("RouteName", "controler-name/{action}/{id}", new { controller = "ControllerName", action = "Index", id = "" });
我還沒有見過一個控制器name屬性一樣,儘管它可能是可能的。
也許這個作品:
public class CustomControllerFactory : DefaultControllerFactory {
protected override Type GetControllerType(RequestContext requestContext, string controllerName) {
return base.GetControllerType(requestContext, controllerName.Replace("-", ""));
}
}
您可以使用自定義的路由處理,給你需要的功能:
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
路由表中的連字路由應在默認路由之前。
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 }
可能在這裏是問題的正確答案。所有其他的解決方法是爲單個網址工作,但這是一個通用的方法
http://blog.didsburydesign.com/2010/02/how-to-allow-hyphens-in-urls-using-asp-net-mvc-2/