2010-05-27 3 views
10

Existe-t-il un moyen de créer un lien ActionScript T4MVC fortement typé avec un hachage/livre/fragment?Création d'un lien ActionLink avec le fragment d'URL T4MVC

Par exemple, voici le lien que je voudrais créer:

<a href="/Home/Index#food">Feed me</a> 

Mais il n'y a pas d'extension à l'objet T4MVC qui peut le faire.

<%= Html.ActionLink("Feed me", T4MVC.Home.Index()) %> 

Alors, que je finis par avoir à faire est de créer une action, puis l'intégrer de cette façon:

<a href="<%= Url.Action(T4MVC.Home.Index()) %>"#food>Feed me</a> 

Ce n'est pas très souhaitable. Quelqu'un at-il des idées/suggestions?

Merci à l'avance

+2

Vous devez éditer le modèle T4 pour l'ajouter. Cela ne devrait pas être trop dur. Mais à mon avis, vous devriez utiliser l'aide url.Action (comme votre exemple). Je pense que c'est beaucoup plus lisible. Personnellement, je n'aime pas générer un html aussi simple qu'une balise dans une aide. –

+0

Une raison pour laquelle vous n'aimez pas le générer? –

Répondre

8

Ce type d'approche est la seule que je peux penser qui se sent (pour moi) un peu mieux que d'écrire l'ancre manuellement:

${Html.ActionLink("Feed me", T4MVC.Home.Index(), Fragment: "food")} 

Outre étincelle ViewEngine - il en coûte 1 bon ancienne méthode d'extension htmlhelper & paramètres nommés.


Je suppose que ce n'est pas disponible dans le ViewEngine par défaut? J'ai décidé d'écrire une extension rapide pour ActionLink, mais ce n'est pas élégant, et j'aurais aimé que toute solution soit disponible pour d'autres dans les futures versions de T4MVC.

Spark remplace <% =%> avec $ {}. Mentionné juste parce que je le préfère (vous devriez essayer si vous mettez l'accent sur l'élégance du code). C# 4.0 est requis pour utiliser les paramètres nommés. C'est parce que je voudrais éviter de perdre l'information sur le paramètre "food" qui est mappé.


Et oui, je suis entièrement d'accord avec Mattias Jakobsson.

+0

Je suppose que ce n'est pas disponible dans le viewengine par défaut? J'ai décidé d'écrire une extension rapide pour ActionLink, mais ce n'est pas élégant, et j'aurais aimé que toute solution soit disponible pour d'autres dans les futures versions de T4MVC. –

+1

Voir ci-dessous, la réponse de David Ebbo, ceci est maintenant dans T4MVC –

9

Dans ASP.NET MVC 2.0 new helpers have been added that allow you to specify the fragment. Exemple:

<%= Html.ActionLink("Feed me", "Action", "Controller", null, null, "food", null, null) %> 
+4

Cela était déjà disponible dans MVC v1, mais pas avec les ajouts T4MVC. Ma principale raison d'avoir T4MVC était de m'éloigner des chaînes magiques qui sont présentes dans votre exemple. –

2

Mise à jour: Cette surcharge est inclus avec T4MVC 2.6.56

Oui, pour être complet que nous devrions probablement ajouter à T4MVC. Cela devrait être facile à faire, sauf que nous nous retrouverons avec beaucoup de surcharge si nous commençons à ajouter protocole/nom d'hôte aussi. Les choses seraient plus faciles si nous cessions de prendre en charge Fx 3.5, car nous pouvions compter sur les paramètres par défaut/nommés, ce qui aide beaucoup à réduire l'enfer de surcharge. Mais j'ai évité cette étape jusqu'à présent parce que tout le monde n'est pas encore sur 4.0. Peut-être devrais-je geler la version actuelle en tant que dernier compatible Fx 3.5/MVC 1.x, et ne supporter que Fx 4.0/MVC 2 dans les versions plus récentes (tout en conservant l'ancienne version indéfiniment).De toute façon, je digresse :)

+0

Salut David. Merci d'avoir répondu. Oui, je pense que geler pour .NET 3.5 va certainement aider à encourager les gens à passer à .NET 4/MVC 2. Certainement, cela va le rendre plus facile avec les params nommés. –

1

David Ebbo a ajouté cette fonctionnalité à T4MVC basé sur un similar question que j'ai fait sur StackOverflow.