Come specificare una proprietà con - nel nome
-
09-10-2019 - |
Domanda
Sto usando ASP.NET MVC con JQueryMobile in una web app. Voglio generare un link:
<a href="/Whatever/Previous" data-role="button" data-icon="arrow-l">Previous</a>
Ho un metodo di estensione di supporto che mi permette di fare:
<%= Html.ActionLink<WhateverController>(c => c.Previous(),
"Previous",
new { data-role = "button", data-icon="arrow-l" } ) %>
Ad eccezione data-role
e data-icon
non sono validi come nomi di proprietà in C #. Utilizzando @data-role
non funziona neanche.
C'è qualche sintassi per ovviare a questo? O sono bloccato con la creazione di un aiutante più specializzato che conosce i nomi degli attributi corretta.
Soluzione
Si dovrebbe essere in grado di utilizzare IDictionary<string, object>
anziché l'oggetto anonimo:
Html.ActionLink<WhateverController>(c => c.Previous(),
"Previous",
new Dictionary<string, object>
{
{ "data-role", "button" },
{ "data-icon", "arrow-l"}
})
Altri suggerimenti
Oltre alla risposta di svick, abbiamo fatto un cambiamento ordinata in ASP.NET MVC 3 dove le proprietà che hanno un carattere di sottolineatura in esse avranno automaticamente le sottolineature convertiti in trattini.
Quindi, se si dispone di codice in questo modo:
<%= Html.ActionLink<WhateverController>(c => c.Previous(),
"Previous",
new { data_role = "button", data_icon="arrow-l") %>
Si renderà il markup con trattini:
<a href="/Whatever/Previous" data-role="button" data-icon="arrow-l">Previous</a>
Perché questo personaggio è anche la sottrazione / operatore unario non è possibile utilizzare in un identificatore. Credo che il metodo di supporto personalizzato è probabilmente la soluzione migliore.