Asp.net mvc 3 参数在ActionResult中起作用,但不';MVC3中的RoutedData中是否存在?

Asp.net mvc 3 参数在ActionResult中起作用,但不';MVC3中的RoutedData中是否存在?,asp.net-mvc-3,Asp.net Mvc 3,我的控制器中有一个简单的ActionResult: public ActionResult Index(int productId) { return View(); } 如果我将其断点,我可以确认productId正在被传递,并且不为null。但是,如果我检查我的RoutedData: (int)RouteData.Values["productId"] 那里什么都没有。控制器有一个键,动作有一个键,但参数没有?发生了什么事?您是否将productId声明为路线中的某个标记 rou

我的控制器中有一个简单的ActionResult:

public ActionResult Index(int productId)
{
    return View();
}
如果我将其断点,我可以确认productId正在被传递,并且不为null。但是,如果我检查我的RoutedData:

(int)RouteData.Values["productId"]

那里什么都没有。控制器有一个键,动作有一个键,但参数没有?发生了什么事?

您是否将
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();
}
例如,这在
产品控制器中完全有意义。现在您可以在
RouteData.Values[“id”]
中找到它