Как мне перенаправить запрос на конкретное действие в конкретном контроллере в MVC2? - PullRequest
0 голосов
/ 28 сентября 2011

В моем приложении MVC2 у меня есть класс AccountController, унаследованный от Controller.Я хочу добиться следующего: когда пользователь пытается открыть метод Account/Payments/NewPayment AccountController.ExecuteNewPayment() должен быть вызван.

Я добавил следующий маршрут:

routes.MapRoute(
    @"CreateNewRuntime",
    @"{langId}/Account/Payments/NewPayment/{whatever}",
    new { langId = @"default", controller = @"Account", action = @"ExecuteNewPayment"});

, но когда я пытаюсьзапрашивая путь выше, я получаю сообщение об ошибке HTTP 404 с «Запрошенным URL» /Account/Payments/NewPayment, и когда я делаю это в отладчике, возникает исключение

Первое исключение типа «System.Web.HttpException»произошла в System.Web.Mvc.dll Дополнительная информация: Контроллер для пути '/ Account / Payments / NewPayment' не найден или не реализует IController.

Что я делаю неправильно?Как мне выполнить сопоставление?

Ответы [ 4 ]

2 голосов
/ 28 сентября 2011

Я считаю, что вы должны использовать эти маршруты,

routes.MapRoute(
                @"CreateNewRuntime1",
                @"Account/Payments/NewPayment/{whatever}",
                new { langId="en-US",controller = @"Account", action = @"ExecuteNewPayment" });

        routes.MapRoute(
                @"CreateNewRuntime2",
                @"{langId}/Account/Payments/NewPayment/{whatever}",
            new { controller = @"Account", action = @"ExecuteNewPayment" },
            new { langId = "[a-z]{2}-[a-z]{2}" });

Обратите внимание, что здесь, на первом маршруте, я не использую langId и не устанавливаю значение по умолчанию для langId "en-US". Во втором маршруте необходим langId, но есть регулярное выражение, чтобы другие маршруты вашей страницы не нарушались. Без этого регулярного выражения langid может быть чем угодно.

1 голос
/ 28 сентября 2011

Вам необходимо включить langid как часть вашего маршрута, иначе MVC не будет отображать ваш URI, даже если вы указали значение по умолчанию.

Возьмите эти два маршрута:

routes.MapRoute(
    @"CreateNewRuntime",
    @"{langId}/Account/Payments/NewPayment/{whatever}",
    new { langId = @"default", controller = @"Account", action = @"ExecuteNewPayment"});


routes.MapRoute(
    @"CreateNewRuntime1",
    @"{langId}/{subLangId}/Account/Payments/NewPayment/{whatever}",
    new { langId = @"default", subLangId= @"test", controller = @"Account", action = @"ExecuteNewPayment1"});

Если я укажу URI /Account/Payments/NewPayment, какой из маршрутов выбрать?Если бы MVC использовал значение по умолчанию для langId, тогда первый маршрут всегда использовался бы, так как он был объявлен раньше другого.Если вы поменялись местами, то всегда будет вызываться второй.

Если у вас есть разные данные в начале вашего URI, вам нужно их указать, и вы не можете использовать значение по умолчанию при указании маршрута.Для прохождения этих двух маршрутов вам понадобится URI /eng/Account/Payments/NewPayment и /eng/e/Account/Payments/NewPayment

0 голосов
/ 28 сентября 2011

Вам нужен собственный обработчик маршрута Посмотрите на это

С уважением.

0 голосов
/ 28 сентября 2011

{language} не имеет значения по умолчанию, равного langid, должно быть language = @"default"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...