Comment utiliser MVC 3 @ Html.ActionLink dans le code c #
Je tiens à appeler l' @Html.ActionLink méthode à l'intérieur d'un c# fonction pour renvoyer une chaîne de caractères avec un lien sur elle.
Quelque chose comme ceci:
string a = "Email is locked, click " + @Html.ActionLink("here to unlock.", "unlock") ;
source d'informationauteur roncansan
Vous devez vous connecter pour publier un commentaire.
En supposant que vous voulez accomplir dans votre contrôleur, il y a plusieurs étapes à franchir. Vous devez instancier un
ViewDataDictionary
et unTempDataDictionary
. Ensuite, vous devez prendre leControllerContext
et de créer unIView
. Enfin, vous êtes prêt à créer votreHtmlHelper
à l'aide de tous ces éléments (en plus de votreRouteCollection
).Une fois que vous avez fait tout cela, vous pouvez utiliser
LinkExtensions.ActionLink
pour créer votre lien personnalisé. À votre avis, vous aurez besoin d'utiliser@Html.Raw()
pour afficher vos liens, ce qui les empêche de HTML de codage. Voici le code nécessaire:Avoir montré tout cela, je vais vous avertir que c'est une bien meilleure idée pour ce faire, dans votre vue. Ajouter l'erreur et d'autres informations à votre ViewModel, puis du code de la vue à créer le lien. Si cela est nécessaire, à travers de multiples points de vue, créer un HtmlHelper à faire de la création de lien.
Mise à JOUR
À l'adresse de l'un.battre.consommateur, ma première réponse était un exemple de ce qui est possible. Si le développeur doit réutiliser cette technique, la complexité peut être caché dans une assistance statique, comme suit:
Puis, dans un contrôleur, il est utilisé comme suit:
ou comme:
Alors qu'il est plus facile à utiliser
Url.Action
cela s'étend désormais de devenir un outil puissant pour générer un mark-up au sein d'un contrôleur à l'aide de tous les HtmlHelpers (avec plein Intellisense).Possibilités d'utilisation comprennent la création de mark-up à l'aide de modèles et de l'Éditeur de templates d'emails, génération de pdf, document en ligne livraison, etc.
Vous pouvez créer une HtmlHelper méthode d'extension:
ou si vous voulez générer ce lien en dehors de la portée d'une page aspx, vous aurez besoin de créer une référence à un HtmlHelper puis de générer. Je le fais dans un
UrlUtility
statique de la classe (je sais, les gens détestent les classes statiques et la parole de l'Utilitaire, mais essayez de vous concentrer). La surcharge en tant que de besoin:Ensuite, vous pouvez écrire le code suivant à partir de là où votre coeur désire:
Il ya un couple de choses mauvaises à propos de ces autres réponses...
Requin réponse vous oblige à porter la LinkExtensions espace de noms en C#, ce qui n'est pas mauvais, mais pas souhaitable pour moi.
Du chasseur idée de faire un helper est un meilleur, mais encore l'écriture d'une fonction d'aide pour une URL unique est lourd. Vous pourriez écrire un assistant pour vous aider à construire des chaînes, qui accepte des paramètres, ou vous pouvez tout simplement vous faire de la bonne vieille façon:
@counsellorben,
je ne vois pas de raison de la complexité; l'utilisateur ne veut que pour rendre une Action de routage dans un chaîne de caractères contenant une balise d'ancrage. En outre, ActionLink() dans un dur-écrit chaîne concaténée achète un rien, et oblige le développeur à utiliser LinkExtensions whidh sont destinés pour les Vues.
Si l'utilisateur est jusqu'au-boutiste sur l'utilisation de ActionLink() ou n'a pas besoin (pour certaines raisons) pour calculer cette chaîne dans le constructeur, de le faire dans une vue est beaucoup mieux.
Je maintiens et de recommander les réponses tvanfosson et j'ai fourni.
Votre meilleur pari est de construire le lien manuellement à l'aide de la UrlHelper disponible dans le contrôleur. Cela dit, je me méfie qu'il ya probablement une meilleure façon de gérer cela dans une vue ou vue partielle, partagées ou non.
Peut-être essayer ceci: