2009-05-14 9 views
1

J'ai besoin de changer la façon dont MVC rend les liens d'action (et les formes et url, etc) en fonction d'un paramètre de configuration. Je suis en train d'écrire une application facebook en utilisant MS MVC et mes liens d'action doivent rendre lien si:Comment puis-je modifier la façon dont MVC rend dynamiquement un lien d'action?

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

cliquant sur le lien ci-dessus feuillette à:
http://apps.facebook.com/MyFBApplication/Home/Index/

« MyFBApplication » est le nom de l'application facebook. Pour construire le lien que j'ai commencé en appelant

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

Lorsqu'un utilisateur clique sur le lien facebook ensuite faire une demande à ce lien sous les couvertures:

http://www.myapplicationserver.com/facebook/123456/Home/Index/
(123456 est id client et est nécessaire)

Ensuite, la réponse d'ici est traitée par facebook et affichée à l'utilisateur comme:
http://apps.facebook.com/MyFBApplication/Home/Index/

Comme mentionné ci-dessus facebook demander les données de page dans les coulisses de.
http://www.myapplicationserver.com/facebook/123456/Home/Index/

Le problème est un appel à

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

rendra un lien qui mène à
http://apps.facebook.com/facebook/123456/Home/Index/

et j'ai besoin pour mener à:
http://apps.facebook.com/MyFBApplication/Home/Index/

Je l'ai fait fonctionner correctement acheter construire un nouveau jeu de méthodes d'extension.

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

Mais cela a une "odeur". Je voudrais trouver un endroit où je peux intercepter la plomberie de Html.ActionLink() en cours et changer la sortie. Ensuite, je peux utiliser tous les appels standard.

Merci!

+0

Si vous pensez que votre méthode d'extension est fulgurante, postez-la dans votre question afin que nous puissions l'analyser et la commenter, comme «ça marche, mais ce serait mieux si vous faisiez quelque chose comme ça. L'un des points de vente principaux de Asp.Net MVC est l'extensibilité qu'il fournit car c'est juste un cadre de base. C'est essentiellement un bac à sable avec quelques outils. Parfois, vous devez faire d'autres outils pour obtenir ce «château» que vous construisez. – MunkiPhD

Répondre

2

Pourquoi cela a-t-il une "odeur"? Microsoft a construit les méthodes ActionLink en tant que méthodes d'extension. Si ceux-ci ne servent pas vos objectifs, vous pouvez écrire les vôtres comme vous l'avez fait.

Si vous le vouliez vraiment, je suppose que vous pourriez créer votre propre version de la méthode ActionLink en tant que surcharge (tant que les signatures de méthodes ne sont pas ambiguës).

Si vous avez besoin de voir comment MS a implémenté la méthode d'extension ActionLink, consultez le code source sous la classe LinkExtensions. Vous pouvez download it here.

+0

Ok, peut-être un ActionLink personnalisé n'est pas une mauvaise solution Je voudrais juste rester plus mainstream. –

+0

J'ai utilisé les liens d'action qu'ils travaillent –

Questions connexes