0

Я хочу знать, почему дружественный URL-адрес генерируется из одного действия, а не с другого.Почему дружественный URL-адрес с ASP.NET MVC5 Атрибуты маршрутизации не работают каждый раз?

Позвольте мне показать вам!

[RoutePrefix("fr-ca/guest")] 
    public class GuestController : BaseController 
    {   
     [Route("users/{id:int}/{ids:int}")] 
     public ActionResult Index(int id, int ids) 
     { 
      return View(); 
     } 

     [Route("register/{id:int}/{ids:int}")] 
     public ActionResult Register(int id, int ids) 
     { 
      return View(); 
     } 
    } 

Чтобы получить дружественные результаты URL, я использую бритву, как это:

@Html.ActionLink("some text", "Index", "Guest", new { id = 1, ids = 1 }, null) 
@Html.ActionLink("some other text", "Register", "Guest", new { id = 1, ids = 1 }, null) 

И в файле маршрута конфигурации я добавил эту строку: routes.MapMvcAttributeRoutes();

Так первая на работу должным образом, Я получаю http: .../fr-ca/guest/users/1/1 Но второй не работает! Я получаю http: .../fr-ca/guest/register? Id = 1 & ids = 1

Любой может помочь?

спасибо !!

Дэвид

+0

Как у вас есть определенный метод RegisterConfig RouteConfig? – user1672994

ответ

0

Вместо использования Html.ActionLink вы можете использовать Html.RouteLink. У этого помощника есть перегрузка, которая берет имя используемого маршрута. Вы должны добавить название вашего маршрута, хотя:

В контроллере:

[Route("register/{id:int}/{ids:int}", Name="GuestRegister")] 
public ActionResult Register(int id, int ids) 
{ 
    return View();   
} 

На ваш взгляд:

@Html.RouteLink("some other text", "GuestRegister", new { id = 1, ids = 1 }, null) 

Это приводит к:

http://.../fr-ca/guest/register/1/1 
1

Предполагая, что вы не имеете любое другое определение маршрута, который конфликтует с этим,

@Html.ActionLink("some other text", "Register", "Guest", new { id = 1, ids = 1 }, null) будет генерировать якорь тег HREF значение, как http://yoursitename/fr-ca/guest/register/1/1, не http:.../fr-ca/guest/register?id=1&ids=1

Поскольку вы указали шаблон как register/{id:int}/{ids:int} Он должен работать нормально для register/1/1 url, но не для /register?id=1&ids=2. Это ожидаемое поведение.

+0

Ваш ответ назовите меня в правильном направлении. Он работает, если я меняю имя Регистра. Причина в том, что у меня есть учетная запись/регистрация и гостевой/реестр. Я думал, что это может сработать, если у меня есть два разных дружественных URL: fr-ca/account/register и fr-ca/guest/register. Вы знаете, могу ли я заставить его работать, добавив что-то в атрибут маршрута? –