Как я могу изменить способ динамического отображения ссылки действия MVC?

StackOverflow https://stackoverflow.com/questions/864794

Вопрос

Мне нужно изменить способ, которым MVC отображает ссылки на действия (а также формы, URL-адреса и т. д.) на основе настроек конфигурации.Я пишу приложение Facebook с использованием MS MVC, и мои ссылки на действия должны отображать ссылку следующим образом:

<a href="/MyFBApplication/Home/Index/">home</a>

нажав на ссылку выше, вы перейдете к:
http://apps.facebook.com/MyFBApplication/Home/Index/

«MyFBApplication» — это название приложения Facebook.Чтобы построить ссылку, я начал с вызова

Html.ActionLink("Home", "Index", "Home")

Когда пользователь нажмет на ссылку, Facebook затем сделает запрос на эту ссылку под обложкой:

http://www.myapplicationserver.com/facebook/123456/Home/Index/
(123456 — это идентификатор клиента, он необходим)

Затем ответ отсюда обрабатывается Facebook и отображается пользователю как:
http://apps.facebook.com/MyFBApplication/Home/Index/

Как упоминалось выше, Facebook за кулисами запрашивает данные страницы.
http://www.myapplicationserver.com/facebook/123456/Home/Index/

Проблема в вызове

Html.ActionLink("Home", "Index", "Home")

отобразит ссылку, ведущую на
http://apps.facebook.com/facebook/123456/Home/Index/

и мне нужно, чтобы это привело к:
http://apps.facebook.com/MyFBApplication/Home/Index/

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

 Html.FacebookActionLink("Home", "Index", "Home")
 Html.FacebookBeginForm("Index", "Home")
 Html.Facebook(etc)

Но у этого есть «запах».Я хотел бы найти место, где я мог бы перехватить процесс Html.ActionLink() и изменить вывод.Тогда я смогу использовать все стандартные вызовы.

Спасибо!

Это было полезно?

Решение

Почему у этого есть «запах»?Microsoft создала методы ActionLink как методы расширения.Если они не соответствуют вашим целям, вы можете написать свои собственные, как вы это сделали.

Если бы вы действительно захотели, я думаю, вы могли бы создать свою собственную версию метода ActionLink в качестве перегрузки (при условии, что сигнатуры метода не будут двусмысленными).

Если вам нужно увидеть, как MS реализовала метод расширения ActionLink, ознакомьтесь с исходным кодом класса LinkExtensions.Ты можешь скачай это здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top