参数在ActionResult中有效,但在MVC3中的RouteData中不存在?

时间:2011-07-21 21:17:26

标签: asp.net-mvc-3

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

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

如果我断点,我可以确认productId正在通过而且不是null。但是,如果我检查我的RouteData:

(int)RouteData.Values["productId"]

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

1 个答案:

答案 0 :(得分:1)

您是否在路线的某处声明了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"]中找到它。