HTML.ActionLink с более чем одним значением маршрута

#asp.net #asp.net-mvc #razor #actionlink #html.actionlink

#asp.net #asp.net-mvc #razor #actionlink #html.actionlink

Вопрос:

У меня проблема с Html.ActionLink методом.

Если я использую

 @Html.ActionLink("Some text", "MyAction", "MyController", new { id = 1234 }, null)
  

Я получаю ссылку с этим href:

 http://web.com/MyController/MyAction/1234
  

Это нормально, но если я использую больше значений маршрута, таких как

 @Html.ActionLink("Some text", "MyAction", "MyController", new { id = 1234, param1 = 3, param2 = 10 }, null)
  

Я получаю ссылку с этим href:

 http://web.com/MyController/MyAction/1234?param1=3amp;param2=10
  

Но мне нужно:

 http://web.com/MyController/MyAction/1234/3/10
  

Вы знаете, как я могу это получить?

Издание, дающее больше информации:

В файле кода MyController у меня есть это:

 [Route("MyController/MyAction/{id}")]
public ActionResult MyAction(string id) { /* some code */ }

[Route("MyController/MyAction/{id}/{param1}/{param2}")]
public ActionResult MyAction(string id, byte param1, byte param2) { /* some code */ }
  

И это мой файл RouteCofig.cs:

 public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapMvcAttributeRoutes();

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
  

Комментарии:

1. У меня есть этот атрибут [Route("MyController/MyAction/{id}/{param1}/{param2}")] в действии public ActionResult MyAction(string id, byte param1, byte param2) , я думал, что там было то же самое.

2. можете ли вы показать нам конфигурацию вашего маршрута?

3. Вопрос отредактирован с помощью контроллера и конфигурации маршрута. Я что-то упускаю?

4. Пожалуйста, попробуйте использовать маршрут из моего ответа.

5. Да, это » MyControllerController" . Если я использую ответ Александру, это сработает, но я хотел бы понять, в чем разница между добавлением MapRoute в RouteConfig или использованием Route атрибута в контроллере.

Ответ №1:

Вот ваше решение,

 routes.MapRoute(
        name: "MyRoute",                                           // Route name
        url: "{controller}/{action}/{id}/{param1}/{param2}",                          // URL with parameters
        defaults: new { controller = "MyController", action = "MyAction", id = "", param1="", param2="" }  // Parameter defaults
);