Как избавиться от знака вопроса в маршруте ASP.NET MVC? - PullRequest
2 голосов
/ 08 марта 2011

У меня определен следующий маршрут:

{theme}/{subtheme}/{contenttype}/{contentdetail}/Print

Когда я использую
Url.Action ("PrintLayout","Page",new {contentUrlTitle = Model.ContentUrlTitle}

, я получаю следующую ссылку:

/theme1/subtheme1/contenttype1/myfirstcontenturltitle?action=PrintLayout 

IХотелось бы, чтобы это был RESTful URL.

/theme1/subtheme1/contenttype1/myfirstcontenturltitle/Print

Вы знаете, что мне здесь не хватает?

Ответы [ 3 ]

3 голосов
/ 08 марта 2011

Поскольку вы еще не опубликовали свою таблицу маршрутов (подсказка: опубликуйте свою таблицу маршрутов), мне придется угадать, каков маршрут. Если вы хотите, чтобы это работало, маршрут должен быть:

routes.MapRoute("contentDetail",
    "{theme}/{subtheme}/{contenttype}/{contentdetail}/print"
    new { controller = "Page", action = "PrintLayout", theme="", subtheme="", contenttype = ""     
    });

Тогда ваш контроллер:

public class PageController
{
    public ActionResult PrintLayout(string theme, string subtheme, string contenttype, string contentdetail)
    {
        //do print stuff here
    }
}
1 голос
/ 09 марта 2011

Jose3d,

  1. Важно отметить, что параметры 'controller' и 'action' обрабатываются как специальные параметры в ASP.NET MVC.Эти параметры предоставляются для сопоставления URL, даже если они не могут быть явно указаны в разделе значений параметров.

Следовательно, следующий оператор:

Url.Action ("PrintLayout","Page",new {contentUrlTitle = Model.ContentUrlTitle}

предоставит следующие параметрыдля сопоставления маршрута:

controller = "Page", action = "PrintLayout", contentUrlTitle = "{значение Model.ContentUrlTitle}"

Как вы можете видеть здесь, 'controller' и 'Параметры действия неявно определяются ASP.NET MVC.

  1. Еще одна вещь, которую многие разработчики не понимают в маршрутизации ASP.NET MVC, заключается в том, что во время сопоставления маршрутов любые параметры, передаваемые в избыточном объеме, будутпоявляются в URL как «строки запроса»

Избыточные параметры - это те, которые не отображаются в URL.

В вашем случае параметр 'action' не отображается впоэтому URL-адрес будет рассматриваться как «избыточный параметр», и поэтому он отображается в виде строки запроса.

Я предлагаю следующее: попробуйте переформатировать ваш URL-адрес, чтобыhat {action} является частью сегмента url.

Одна вещь, которую я не понимаю, - почему параметр 'controller' также не отображается в виде строки запроса?Возможно, предоставление более подробной информации может быть более полезным.

0 голосов
/ 08 марта 2011

Я думаю, вы можете попробовать это:

Url.Action("PrintLayout/Print", "Page");

Дело в том, что при использовании словаря для разбора нового параметра поведение по умолчанию таково.

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