ASP.NET MVC Как вызвать действие другого контроллера? - PullRequest
1 голос
/ 04 декабря 2010

(решено, смотрите в конце описания)

Привет, скажем, у меня есть этот URL:

http://mystite.com

затем я использую действие HomeController и Index.

но, если URL выглядит как

http://mystite.com/itemID

itemID - это строка, она необязательна, тогда я использую MyController и действие ViewContent

файл Global.asax:

    routes.MapRoute(
        "ViewItemContent",
        "{itemID}",
        new { controller = "My", 
              action = "ViewContent", 
              itemID = UrlParameter.Optional 
            }
    );

проблема в том, что когда я использую 1-й URL-адрес, сервер обрабатывает его как 2-й (что очевидно). Итак, если параметр itemID равен NULL, как тогда вызвать действие HomeController Index из MyController?

Я пытался

return RedirectToAction("Index", "Home");

, но он всегда перенаправляет меня на действие MyController ViewContent

решаемые

Я решил эту проблему, переместив метод RedirectToAction из действия MyController ViewContent в действие HomeController Index.

Я пытался перенаправить с MyController -> Home, и это не сработало. Теперь я изменил перенаправление с Home -> MyController на

return RedirectToAction("ViewCategory", "Category", new { itemID = itemID });

и в этом случае все работает :) 1050 *

1 Ответ

0 голосов
/ 09 мая 2011

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

Может быть, вы просто поместили маршрут "ViewItemContent" над другим маршрутом. Ваше решение совершает еще одну ненужную обратную поездку на сервер из-за RedirectToAction.

На самом деле вы можете поставить другой маршрут вверху:

routes.MapRoute(
    "Home",
    "",
    new { controller = "Home", 
          action = "Index"
        }
);

Таким образом, MVC сначала будет искать это, и поскольку http://mystite.com не имеет ничего сзади, маршрут "Home" будет иметь приоритет, и он будет использовать контроллер Home с действием Index напрямую.

...