2010-05-27 3 views
10

Gibt es eine Möglichkeit, einen stark typisierten T4MVC ActionLink mit einem Hash/Pfund/Fragment darin zu erstellen?Erstellen Sie einen T4MVC ActionLink mit URL-Fragment

Zum Beispiel, hier ist der Link Ich mag würde erstellen:

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

Aber es gibt keine Erweiterung des T4MVC Objekt, das dies tun können.

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

Also, was ich am Ende zu tun ist, eine Aktion zu erstellen, und es dann auf diese Weise einbinden:

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

Dies ist nicht sehr wünschenswert. Hat jemand irgendwelche Ideen/Vorschläge?

Vielen Dank im Voraus

+2

Sie müssten die T4-Vorlage bearbeiten, um dies hinzuzufügen. Das sollte nicht zu schwer sein. Aber meiner Meinung nach sollten Sie den Helfer url.Action verwenden (als Ihr Beispiel). Ich fühle, dass es viel besser lesbar ist. Persönlich mag ich nicht, solch einfaches HTML als ein Umbau in einem Helfer zu erzeugen. –

+0

Gibt es einen Grund, warum Sie es nicht gerne generieren möchten? –

Antwort

8

Diese Art von Ansatz ist die einzige, die ich davon (für mich) fühlt sich denken kann, etwas besser als Anker Schreiben manuell:

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

Neben Funkenviewengine - es 1 gut Kosten alte htmlhelper Erweiterung Methode & benannte Parameter.


Ich gehe davon aus, dass dies in den Standard-Viewengine nicht verfügbar ist? Ich habe mich entschieden, eine kurze Erweiterung für den ActionLink zu schreiben, aber es ist nicht elegant, und ich hätte mir gewünscht, dass eine Lösung in zukünftigen Versionen von T4MVC für andere verfügbar ist.

Spark ersetzt <% =%> mit $ {}. Erwähnt, nur weil ich es bevorzuge (Sie sollten es versuchen, wenn Sie Code Eleganz betonen). C# 4.0 ist erforderlich, um benannte Parameter zu verwenden.

Das ist, weil ich vermeiden möchte, Informationen zu verlieren, die Parameter "Essen" Argument Karten.


Und ja, ich stimme stark mit Mattias Jakobsson überein.

+0

Ich nehme an, dass dies in der Standardansichtengine nicht verfügbar ist? Ich habe mich entschieden, eine kurze Erweiterung für den ActionLink zu schreiben, aber es ist nicht elegant, und ich hätte mir gewünscht, dass eine Lösung in zukünftigen Versionen von T4MVC für andere verfügbar ist. –

+1

Siehe unten, David Ebbos Antwort, dies ist jetzt in T4MVC –

9

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

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

Dies war bereits in MVC v1 verfügbar, aber nicht mit den T4MVC-Zusätzen. Mein Hauptgrund für T4MVC war, von den magischen Zeichenfolgen, die in Ihrem Beispiel vorhanden sind, wegzukommen. –

2

aktualisieren: Diese Überladung wird mit T4MVC 2.6.56

enthalten

Ja, der Vollständigkeit halber sollten wir dies wahrscheinlich zu T4MVC hinzufügen. Es sollte einfach zu tun sein, außer dass wir mit einer Überlastung enden werden, wenn wir auch Protokoll/Hostname hinzufügen.

Die Dinge wären einfacher, wenn wir aufhörten, Fx 3.5 zu unterstützen, weil wir uns auf default/named params verlassen konnten, die sehr dabei helfen, die Überlastung der Hölle zu reduzieren. Aber ich habe diesen Schritt bisher vermieden, weil noch nicht alle auf 4.0 sind.

Vielleicht sollte ich die aktuelle Version als letzte Fx 3.5/MVC 1.x kompatibel einfrieren, und dann nur Fx 4.0/MVC 2 in neueren Builds unterstützen (während die alte auf unbestimmte Zeit beibehalten).Wie auch immer, ich bin abschweifend :)

+0

Hallo David. Danke für die Antwort. Ja, ich denke, dass das Einfrieren für .NET 3.5 definitiv dazu beitragen wird, Leute dazu zu bewegen, zu .NET 4/MVC 2 zu wechseln. Sicherlich wird es mit benannten Parametern einfacher. –

1

David Ebbo hinzugefügt diese Funktion zu T4MVC basierend auf einem similar question ich auf StackOverflow gemacht.

Verwandte Themen