2010-05-27 12 views
10

C'è un modo per creare un ActionLink T4MVC fortemente tipizzato con un hash/pound/frammento in esso?Creare un ActionLink T4MVC con frammento di URL

Per esempio, ecco il link mi piacerebbe creare:

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

Ma non c'è alcuna estensione all'oggetto T4MVC che può fare questo.

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

Allora, che finisco per dover fare è creare un'azione, e poi incorporare in questo modo:

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

Questo non è molto desiderabile. Qualcuno ha qualche idea/suggerimento?

Grazie in anticipo

+2

Dovresti modificare il modello T4 per aggiungerlo. Questo non dovrebbe essere troppo difficile. Ma secondo me dovresti usare l'url.Assistente alle azioni (come il tuo esempio). Sento che è molto più leggibile. Personalmente non mi piace generare un semplice html come tag in un helper. –

+0

Qualche motivo per cui non ti piace generarlo? –

risposta

8

Questo tipo di approccio è l'unico che mi viene in mente che si sente (a me) un po 'meglio che scrivere ancora manualmente:

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

parte scintilla viewengine - costa 1 buono vecchio metodo di estensione htmlhelper & parametri con nome.


presumo che questo non è disponibile nel viewengine default? Ho deciso di scrivere un'estensione rapida per ActionLink, ma non è elegante e mi piacerebbe che qualsiasi soluzione fosse disponibile per gli altri nelle versioni future di T4MVC.

Spark sostituisce <% =%> con $ {}. Menzionato solo perché lo preferisco (dovresti provarlo se sottolinei l'eleganza del codice). È necessario C# 4.0 per utilizzare i parametri denominati.

Questo perché vorrei evitare di perdere informazioni su quale parametro argomento "cibo" mappa.


E sì, sono decisamente d'accordo con Mattias Jakobsson.

+0

Suppongo che questo non sia disponibile nel viewengine predefinito? Ho deciso di scrivere un'estensione rapida per ActionLink, ma non è elegante e mi piacerebbe che qualsiasi soluzione fosse disponibile per gli altri nelle versioni future di T4MVC. –

+1

Vedi sotto, la risposta di David Ebbo, questa è ora in T4MVC –

9

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

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

Questo era già disponibile in MVC v1, ma non con le aggiunte T4MVC. Il motivo principale per cui avevo T4MVC era di allontanarmi dalle stringhe magiche presenti nel tuo esempio. –

2

Aggiornamento: Questo sovraccarico è incluso con T4MVC 2.6.56

Sì, per completezza dovremmo probabilmente aggiungere questo a T4MVC. Dovrebbe essere facile da fare, tranne che finiremo con un sovraccarico se iniziamo ad aggiungere anche protocol/hostname.

Le cose sarebbero più facili se smettessimo di supportare Fx 3.5, perché potremmo fare affidamento su parametri predefiniti/denominati, che aiutano molto a ridurre il sovraccarico. Ma finora ho evitato quel passaggio perché non tutti sono ancora su 4.0.

Forse dovrei bloccare la versione corrente come l'ultimo compatibile con Fx 3.5/MVC 1.x, e quindi supportare solo Fx 4.0/MVC 2 nelle versioni più recenti (mantenendo il vecchio a tempo indeterminato).Comunque, sto divagando :)

+0

Ciao David. Grazie per la risposta. Sì, penso che congelarlo per .NET 3.5 aiuterà sicuramente a incoraggiare le persone a spostarsi su .NET 4/MVC 2. Certo, lo renderà più semplice con i param nominati. –

1

David Ebbo ha aggiunto questa funzione a T4MVC basata su uno similar question che ho creato su StackOverflow.

Problemi correlati