Параметр работает в ActionResult, но не существует в RouteData в MVC3? - PullRequest
0 голосов
/ 22 июля 2011

У меня есть простой ActionResult в моем контроллере:

public ActionResult Index(int productId)
{
    return View();
}

Если я установлю точку останова, я могу подтвердить, что идентификатор продукта пропускается и не является нулевым. Однако, если я проверю свои данные RouteData:

(int)RouteData.Values["productId"]

Там ничего нет. Есть ключ для контроллера и ключ для действия, но ничего для параметра? Что происходит?

1 Ответ

1 голос
/ 22 июля 2011

Вы объявили productId как токен где-то на ваших маршрутах?

routes.MapRoute(
    "Default",
    "{controller}/{action}/{productId}",
    new { controller = "Home", action = "Index", productId = UrlParameter.Optional }
);

Если вы не ожидали найти его в коллекции RouteData.Эта коллекция содержит только токены, которые были объявлены в ваших маршрутах.

Маршрут по умолчанию использует id (тот, который был создан мастером Visual Studio), так что вы можете переименовать ваш параметр действия:

public ActionResult Index(int id)
{
    return View();
}

, что полностью имело бы смысл в ProductsControllerнапример.И теперь вы найдете его в RouteData.Values["id"].

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