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

कार्यों के लिए ऊपर काम करता है, यानी की अनुमति देते हैं, लेकिन मैं नियंत्रकों के लिए (या समान) भी ऐसा ही करने के लिए सक्षम होना चाहते हैं भी URL नाम में कोई हाइफ़न है । (मैं ActionName विशेषता है, लेकिन कोई किस्मत की कोशिश की) कोई आसान तरीका इस लक्ष्य को हासिल करने के लिए हैयूआरएल में हाइफ़न asp.net MVC के 2 नियंत्रक नाम के लिए

उत्तर

7

सबसे आसान तरीका है एक कस्टम मार्ग को जोड़ने की जाएगी: मैं उस तरह एक नियंत्रक नाम विशेषता से पहले नहीं देखा है

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

हालांकि यह संभव हो सकता है।

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(); 

यहां एक समान quastion पूछा गया है: 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 } 
संबंधित मुद्दे