2016-12-28 7 views
0

У меня есть URL-адрес, как это:Удаление имя Действие из URL и добавить заголовок страницы в URL - ASP.Net MVC

http://localhost:17594/Contact/Contact 

Теперь я хочу, чтобы показать, как это:

http://localhost:17594/Contact/Contact-us 

RouteConfig :

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     name: "Categories", 
     url: "Categories/{id}", 
     defaults: new { controller = "Categories", action = "Index", id = UrlParameter.Optional }, 
     namespaces: new[] { "FinalKaminet.Controllers" } 
    ); 

    routes.MapRoute(
     name: "Contacts", 
     url: "{controller}/{title}", 
     defaults: new { controller = "Contact", action = "Contact", title = UrlParameter.Optional }, 
     namespaces: new[] { "FinalKaminet.Controllers" } 
    ); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}/{title}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional , title = UrlParameter.Optional }, 
     namespaces: new[] { "FinalKaminet.Controllers" } 
    ); 

} 

Посмотреть

@Html.ActionLink("Contact Us", "Contact" , "Contact" , new { title = "contact-us" } , null) 

Но я получил ошибку в строке 63, которая использует Categories карту маршрута.

Exception Details: System.InvalidOperationException: No route in the route table matches the supplied values.

Source Error:

Line 62: @Html.ActionLink("وبلاگ", "")

Line 63: @Html.Action("MenuCat" , "Home")

Что не так?

ответ

0

Чтобы отобразить действие url как Contact-us (для определения маршрутов), вы можете использовать маршрутизацию атрибутов.

[Route("Contact/Contact-us")] 
    public ActionResult Contact() { … } 

Для получения дополнительной информации обратитесь к msdn. https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/

0

Попробуйте

В вашем маршрута конфигурации файл:

routes.MapRoute(
     name: "Contacts", 
     url: "Contact/{action}/{title}", 
     defaults: new { controller = "Contact", action = "Contact", title = UrlParameter.Optional }, 
     namespaces: new[] { "FinalKaminet.Controllers" } 
    ); 
0

У вас есть два варианта.

Либо добавить конкретный маршрут через конвенции на основе маршрутизации

routes.MapRoute(
    name: "ContactUs", 
    url: "contact/contact-us", 
    defaults: new { controller = "Contact", action = "Contact" }, 
    namespaces: new[] { "FinalKaminet.Controllers" } 
); 

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}/{title}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional , title = UrlParameter.Optional }, 
    namespaces: new[] { "FinalKaminet.Controllers" } 
); 

Или включить атрибут маршрутизации в RouteConfig перед тем конвенционных на основе маршрутов

//enable attribute routing 
routes.MapMvcAttributeRoutes(); 

//other convention-based routes. 
routes.MapRoute(....); 

и применять маршрут непосредственно к контроллеру и действию.

public class ContactController : Controller { 

    //GET contact/contact-us 
    [HttpGet] 
    [Route("Contact/Contact-us")] 
    public ActionResult Contact() { … } 

}