Orchard - 如何使用querystring params使页面工作?

时间:2012-04-02 00:11:26

标签: asp.net-mvc-3 asp.net-mvc-routing

我在我的一个模块中创建了一个这样的页面 - / OrchardLocal / Module1 / Controller1 / Action1。它需要一个id参数。

如果id像这样传递,该页面有效 - / OrchardLocal / Module1 / Controller1 / Action1 / 7

但是如果我在querystring中传递id,我会收到错误 - / OrchardLocal / Module1 / Controller1 / Action1?id = 7

“参数字典包含非可空类型'System.Int32'的参数'id'的空条目”

我不必使用查询字符串。但是我想知道为什么它不起作用,我怎样才能使它与querystring一起工作。

由于

[编辑]

这是行动方法。

    public ActionResult Action1(int id)
    {
        ...
    }

这就是我在Routes.cs中所拥有的。

new RouteDescriptor { 
    Priority = 6,
    Route = new Route("Action1/{id}",
    new RouteValueDictionary{{"area", "Module1"},{"controller","Controller1"},{"action","Action1"}}, 
    new RouteValueDictionary(),
    new RouteValueDictionary{{"area", "Module1"}},
    new MvcRouteHandler())
}

1 个答案:

答案 0 :(得分:2)

这是路由问题,而不是Orchard。如果您将id param设置为optional:

,这应该有效
Route = new Route(
    "Action1/{id}",
    new RouteValueDictionary {
        {"area", "MyModule"},
        {"controller", "Controller1"},
        {"action", "Action1"}
        , { "id", UrlParameter.Optional}
    },
    new RouteValueDictionary(),
    new RouteValueDictionary {{"area", "MyModule"}},
    new MvcRouteHandler()
)

注意:优先级为6,我无法重现您的错误。可能是因为您使用的是早期版本的Orchard。我在1.4。如果Priority = 100,我可以重新编写您的错误,然后上面的更改修复了它。