Orchard - как заставить страницу работать с параметрами строки запроса? - PullRequest
2 голосов
/ 02 апреля 2012

Я создал такую ​​страницу в одном из своих модулей - / OrchardLocal / Module1 / Controller1 / Action1. Требуется параметр id.

Страница работает, если идентификатор передается следующим образом - / OrchardLocal / Module1 / Controller1 / Action1 / 7

Но я получаю сообщение об ошибке, если передать идентификатор в строке запроса - / OrchardLocal / Module1 / Controller1 / Action1? Id = 7

"Словарь параметров содержит пустую запись для параметра 'id' не обнуляемого типа 'System.Int32'"

Мне не нужно использовать строку запроса. Но я хотел бы знать, почему он не работает и как заставить его работать со строкой запроса.

Спасибо

[EDIT]

Вот метод действия.

    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 Ответ

2 голосов
/ 03 апреля 2012

Это вопрос маршрутизации, а не Орчард. Это должно работать, если вы установите id param как необязательный параметр:

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. С Приоритетом = 100 я могу воспроизвести вашу ошибку, а затем вышеуказанное изменение исправит ее.

...