Как настроить маршрутный символ маршрута в MVC - PullRequest
0 голосов
/ 21 сентября 2018

URL-адрес любой страницы сведений о продукте на нашем сайте выглядит следующим образом:
http://example.com/Product/Index/pid219

Где:

  • Product - это имя контроллера
  • Index - это название метода, а
  • pid219 - идентификатор продукта.

. Я бы хотел, чтобы эта страница была доступна как
http://example.com/Product/pid219
ИЛИ
http://example.com/Product/name-of-the-product/pid219

Итак, я изменил RouteConfig.cs на это:

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

    routes.MapRoute(
        name: "ProductRoute1",
        url: "{controller}/{id}",
        defaults: new { controller = "Product", action = "Index", id = "" }
    );
    routes.MapRoute(
       name: "ProductRoute2",
       url: "{controller}/{ignore}/{id}",
       defaults: new { controller = "Product", action = "Index", id = "" }
   );
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );            
}

Страница теперь доступна по желанию, однако, проблема ввсе остальные страницы, которые заставляют Ajax вызывать нажатия кнопок.Например: нажатие кнопки входа в систему не работает.

Имя контроллера - SignIn, и есть два метода - Index (загружающий страницу), SignInUser (запускаемый по запросу ajax)

Когда я нажимаю кнопку «Войти», вместо метода SignInUser теперь используется метод Index.

function SignInUser() {    
    $.ajax({
        type: "POST",
        url: '@Url.Action("SignInUser", "SignIn")',            
        data: '',
        contentType: "application/json; charset=utf-8",
        dataType: "json",            
        success: function (response) {                               
        }
    });        
} 

Если мы задаем новый маршрут, следует ли изменить URL-адрес в вызове ajax,Пожалуйста, помогите мне, как я могу достичь своей цели здесь.Также укажите, нужно ли объявлять новые маршруты до или после маршрута по умолчанию.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Я бы хотел, чтобы эта страница была доступна как http://example.com/Product/pid219 ИЛИ http://example.com/Product/name-of-the-product/pid219 Для вас:

routes.MapRoute(
        name: "ProductRoute1",
        url: "Product/{id}",
        defaults: new {controller = "Product", action = "Index", id = "" }
    );

http://example.com/Product/name-of-the-product/pid219

routes.MapRoute(
        name: "ProductRoute1",
        url: "Product/{*action}/{id}",
        defaults: new { controller = "Product", action = "Index", id = "" }
    );
0 голосов
/ 21 сентября 2018

Приближается проблема, потому что в маршрутах будет использоваться тот маршрут, который соответствует первому.Силилар на switch заявление.В вашем случае это соответствует

routes.MapRoute(
        name: "ProductRoute1",
        url: "{controller}/{id}",
        defaults: new { controller = "Product", action = "Index", id = "" }
    );

Если новая функциональность требуется только в одном контроллере, то лучше добавить маршрут непосредственно для этого.Что-то вроде ниже

routes.MapRoute(
        name: "ProductRoute1",
        url: "Product/{id}",
        defaults: new { controller = "Product", action = "Index", id = "" }
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...