Как я могу изменить способ, которым MVC визуализирует ссылку действия динамически? - PullRequest
1 голос
/ 14 мая 2009

Мне нужно изменить способ, которым 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 - это идентификатор клиента и необходим)

Тогда ответ отсюда обрабатывается фейсбуком и отображается пользователю как:
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 () в процессе и изменить вывод. Тогда я могу использовать все стандартные звонки.

Спасибо!

1 Ответ

2 голосов
/ 15 мая 2009

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

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

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

...