2014-12-17 11 views
6

Ho un link di azione in vista, ho bisogno di passare il parametro contenente trattino (-). La modifica della convenzione del nome non è possibile. Come faccio a fare questo?Come passare routeValues ​​che contiene trattino tramite actionlink in asp.net mvc 5

<li>@Html.ActionLink("abc", "abc", "abc", new { area = "",sap-ie="Edge" }, new { id = nav_abc"})</li> 

Questo mi dà un errore "Invalid Anonymous Type Declarator" poiché contiene trattino. Fondamentalmente ho bisogno del link di azione per generare html come di seguito.

<a href=".../abc?sap-ie=Edge" id="nav_abc" >abc</a> 

risposta

3

Se sei sicuro che l'URL non cambierà molto dalla struttura che avete specificato è possibile utilizzare un tag di ancoraggio e costruire l'URL dal Url.Action.

<a href='@Url.Action("abc", "abc")?sap-ie=Edge'>abc</a> 

Il punto di HtmlHelpers sono per contribuire a generare html comunque .. quindi se ottenere nel modo, si può scendere fino a html corretto e giusto farlo fare.

+0

L'ho provato. ma genera "sap_ie", non "sap-ie" –

+0

funziona solo con "data-" – InferOn

+0

@ user3273146 ho modificato la mia risposta ... funzionerebbe? – scartag

1

Hai provato a utilizzare il sovraccarico this del metodo ActionLink?

@{ 
     var routeValues = new RouteValueDictionary(); 
     routeValues.Add("sap-ie", "Edge"); 
     routeValues.Add("area", ""); 

     var attributes = new Dictionary<string, object>(); 
     attributes.Add("Id", "nav_abc"); 
    } 
    @Html.ActionLink("Go to contact page", "Contact", routeValues, attributes) 
+0

Ho provato sia il tuo approccio che lo di Scartag. La tua area manca e id dovrebbe venire come htmlattribute invece di routevalues. Grazie comunque –

+0

Whoops, sembra che l'abbia trascurato. Ho aggiornato la mia risposta in base al tuo feedback. Grazie! – AperioOculus

2

Volevo solo far notare che se non fosse che il trucco funziona solo con sottolineatura data attributi è, è che funziona solo con il passaggio attributi HTML in generale. Questo perché ha senso cambiare i caratteri di sottolineatura in trattini nel contesto dell'HTML, poiché i caratteri di sottolineatura non sono usati negli attributi HTML. Tuttavia, è perfettamente valido per te avere un parametro di percorso con un carattere di sottolineatura, quindi il framework non può fare supposizioni sul tuo intento.

Se è necessario passare i valori del percorso con trattini, è necessario utilizzare un RouteValueDictionary. Questa è semplicemente una limitazione di oggetti anonimi che non possono essere superati.

<li>@Html.ActionLink("abc", "abc", "abc", new RouteValueDictionary { { "area", "" }, "sap-ie", "Edge" } }, new RouteValueDictionary { { "id", "nav_abc" } })</li> 

Purtroppo, non c'è ActionLink overload che accetta sia una RouteValueDictionary per routeValues e un oggetto anonimo per htmlAttributes, per cui il passaggio uno significa commutazione entrambi. È possibile utilizzare tecnicamente qualsiasi implementazione IDictionary per il parametro htmlAttributes, quindi è preferibile utilizzare solo new Dictionary { { "id", "nav_abc" } }. Tocca a voi.

Problemi correlati