2010-11-22 12 views
0

Raisonnablement nouveau pour MVC. Mon problème est que j'ai un contrôleur qui a 3 différents ActionResult qui s'appellent en fonction d'une énumération.
Les trois résultats d'action renvoient la même vue mais avec des listes différentes en tant que modèle de vues. Dans la vue, l'utilisateur doit pouvoir cliquer sur un élément de la liste et afficher les détails en fonction de l'ID de l'élément.
par exemple. Site/Installations/Bibliothèques renvoie la liste des bibliothèques, Site/Installations/Bibliothèques/1 renvoie les détails. Cela fonctionne bien lorsque vous entrez le chemin complet, mais sur la vue elle-même en cliquant sur l'ancreMVC Url par rapport à la variable ActionResult

<a href="@item.ID">@item.Name</a> 

sur un élément dans la liste renvoie l'URL du site/Installations/1 au lieu du site/Installations/Bibliothèques/1. Je ne peux pas utiliser un ActionLink car l'Action à appeler est dynamique. Je sais que cela pourrait être résolu en créant une vue différente pour chaque type mais je me demandais s'il pourrait y avoir un autre moyen?

Merci d'avance.

Répondre

1

Vous pouvez utiliser ce code (une astuce javascript):

<a href="" onclick="window.location = window.location + @item.ID">@item.Name</a> 

Ou, si vous voulez utiliser href propriété, vous pouvez utiliser ce code:

<%=Html.ActionLink(item.Name, "Facilities", ViewData("ActionName"), new {id = item.ID}) %> 

(Dans ce cas, vous devez spécifier ViewData ("ActionName") dans le contrôleur).

+0

Ive essayé la deuxième option et son si simple Im honte que je ne pensais pas à cela. Idéalement, il doit fonctionner sans JavaScript comme c'est le cas pour le développement mobile et tous les téléphones n'ont pas de javascript disponible. La deuxième option est géniale cependant. Merci. – Chiefy

1

Je vous suggère de le changer pour que vous n'ayez qu'une action, mais il prend un argument à la place, et en fonction de l'argument vous poussez différentes listes à la vue (peut-être en utilisant 3 fonctions auxiliaires différentes) . C'est comme ça que je mettrais en œuvre ce que vous décrivez!

Bonne chance!

+0

C'est comme cela que je l'ai implémenté à l'origine, mais si quelqu'un devait copier l'URL (ou le mettre en signet) de la liste et l'utiliser de nouveau, il ne prendrait pas d'argument et échouerait. – Chiefy

+0

Pourquoi ne serait-il pas copié et/ou mis en signet? Puisque l'argument est inclus dans l'URL, il devrait arriver aussi! (Sauf si l'utilisateur supprime cette partie, mais c'est en quelque sorte leur problème n'est-ce pas? ^^) Avec un routage sophistiqué, vous auriez des URL parfaitement bien. Mais bon que vous avez trouvé une réponse que vous êtes heureux :) – Robin

Questions connexes