Создание ссылки MVC - PullRequest
       5

Создание ссылки MVC

0 голосов
/ 20 июня 2011

Используя этот маршрут:

    routes.MapRoute(
        "PartListRoute",
        "Products/PartList/{Manufacturer}/{Product}/{PartNumber}",
        new { controller = "PartList", action = "Index", Manufacturer = UrlParameter.Optional, Product = UrlParameter.Optional, PartNumber = "" }
    );

Я пытаюсь создать ссылку, идущую из / Products / PartList в / Products / PartList / Manufacturer1, на основе списка производителей, извлеченных из базы данных.mfr.Name - это имя производителя.

Маршрут должен привести к URL-адресам, подобным следующему

  • / Products / PartList /
  • / Products / PartList /Производитель1 /
  • / Продукты / PartList / Производитель3 / Product1 /
  • / Продукты / PartList / Производитель2 / Product4 / DN-438

Ближайший Я пришелis

@Html.RouteLink(mfr.Name, "PartListRoute", new { Manufacturer = mfr.Name} )

, который помещает название производителя в текст, но не добавляет его в URL.У меня такое ощущение, что я предполагаю что-то о маршрутах и ​​ссылках, что не соответствует действительности.

Есть ли способ использовать маршрут для создания новой ссылки в правильном формате?

1 Ответ

0 голосов
/ 21 июня 2011

В случае, если кто-то еще сталкивался с этим вопросом, я, наконец, наткнулся на эту статью, указав, что есть ошибка, когда у вас есть последовательные необязательные параметры URL.

http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx

Я не буду утверждать, что полностью понимаю объяснение, но создание дополнительных маршрутов, указывающих все на исходный контроллер, похоже, решило проблему:

        routes.MapRoute(
            "PartListRoute",
            "Products/PartList/{Manufacturer}",
            new { controller = "PartList", action = "Index", Manufacturer = UrlParameter.Optional }
        );

        routes.MapRoute(
            "PartListRoute2",
            "Products/PartList/{Manufacturer}/{Product}",
            new { controller = "PartList", action = "Index", Manufacturer = UrlParameter.Optional, Product = UrlParameter.Optional }
        );

        routes.MapRoute(
            "PartListRoute3",
            "Products/PartList/{Manufacturer}/{Product}/{PartNumber}",
            new { controller = "PartList", action = "Index", Manufacturer = UrlParameter.Optional, Product = UrlParameter.Optional, PartNumber = "" }
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...