нужна помощь с MVC и маршрутами - PullRequest
1 голос
/ 12 октября 2009

Я очень новичок в MVC и пытаюсь настроить новый сайт, используя его. По причинам SEO нам нужно сделать URL-адрес страницы наподобие «Recruiter / 4359 / John_Smith» или в основном {controller}/{id}/{name}. У меня это работает, когда я создаю URL в коде, как это так ...

//r is a recruiter object that is part of the results for the view

r.Summary = searchResult.Summary + "... <a href=\"/Recruiter/" + r.Id + "/" + r.FirstName + "_" + r.LastName + "\">Read More</a>"

Но когда я использую коллекцию результатов поиска в моем представлении и перебираю их, я пытаюсь создать другую ссылку на ту же страницу, делая что-то вроде <%=Html.ActionLink<RecruiterController>(x => x.Detail((int)r.Id), r.RecruiterName)%>, но это не работает. Когда я использую этот код в представлении, он дает мне URL в виде / Recruiter / Detail / 4359. Мне сказали коллеги, что я должен использовать Html.ActionLink, чтобы создать ссылку как в представлении, так и в контроллере, чтобы если маршрут изменится в будущем, он будет работать автоматически. К сожалению, он не был уверен, как это сделать в этом случае. Итак, мои проблемы ...

  1. Как я могу заставить Html.ActionLink работать в представлении, чтобы создать URL, который мне нужен (как r.Summary выше)?
  2. Как использовать Html.ActionLink в контроллере вместо жесткого кодирования ссылки, как у меня выше?

Ответы [ 2 ]

1 голос
/ 12 октября 2009

Я наткнулся на этот пост в блоге, который заставил меня двигаться в правильном направлении.

http://www.chadmoran.com/blog/2009/4/23/optimizing-url-generation-in-aspnet-mvc-part-2.html

1 голос
/ 12 октября 2009

Рекомендуется использовать метод ActionLink для записи ссылок, как говорит ваш коллега, таким образом, они всегда будут соответствовать вашим маршрутам.

В вашем текущем случае причина, по которой он записывает метод, заключается в том, что он основан на маршрутизации по умолчанию. Вы можете исправить это, добавив еще один маршрут по умолчанию в Global.asax. Вам просто нужно указать желаемый формат:

routes.MapRoute(
    "Recruiter",
    "Recruiter/{id}/{name}",
    new { controller = "Recruiter", action = "Details" }
);

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

EDIT:

Вы можете найти этот инструмент для отладки маршрута полезным.

...