2010-05-24 19 views
92

C'è una sintassi più bello quando la creazione di elementi con attributi sillabate invece di utilizzare:hyphenated attributi HTML con asp.net mvc

<%= Html.TextBox ("name", value, new Dictionary<string, object> { {"data-foo", "bar"} }) %> 

Guardando le specifiche HTML per gli standard proposti HTML 5 e WIA ARIA esso sembra che i trattini degli attributi HTML siano pianificati per essere più comuni come una sorta di semplice spaziatura dei nomi.

E.g. HTML 5 propone che gli attributi personalizzati siano prefissati con data- e WIA ARIA utilizza il prefisso aria- per tutti gli attributi ARIA WIA.

Quando si utilizzano helper HTML in ASP.NET MVC come <%= Html.TextBox("name", value, new { attribute = attributeValue }) %>, l'oggetto anonimo viene convertito in un dizionario.

Sfortunatamente in C# non è supportato il trattino nei nomi, quindi l'unica alternativa è creare un dizionario. La sintassi per la quale è molto prolissa, qualcuno ha visto un'alternativa migliore o un modo semplice per alterare la funzionalità delle estensioni HTML di ASP.NET MVC senza dover riscrivere l'intera estensione?

risposta

167

Utilizzare un trattino basso nel nome dell'attributo dati e lo gestirà magicamente per te, convertendolo in un trattino. Sa che vuoi un trattino invece di un carattere di sottolineatura perché i caratteri di sottolineatura non sono validi nei nomi di attributi html.

<%= Html.TextBox("name", value, new { @data_foo = "bar"}) %> 
+6

+1 Mi ha appena salvato dallo scrivere un codice veramente brutto. Grazie! –

+2

Ho trovato un problema analogo a molte domande di SO, e questa è la migliore risposta. – user2780436

+0

Puoi aggiungere il motivo della tua affermazione ** i caratteri di sottolineatura non sono validi negli attributi html **. Almeno [html 4.01 afferma] (http://www.w3.org/TR/html401/intro/sgmltut.html#didx-attribute): _Il valore dell'attributo può contenere solo lettere (az e AZ), cifre (0- 9), trattini (ASCII decimale 45), punti (ASCII decimale 46), caratteri di sottolineatura (ASCII decimale 95) e due punti (ASCII decimale 58) _, – surfmuggle

17

La risposta fornita a ActionLink htmlAttributes suggerisce di utilizzare caratteri di sottolineatura anziché trattini. MVC.Net dovrebbe emettere i trattini anziché i trattini bassi quando si invia la pagina al browser.

+0

Questo funziona per me. –

Problemi correlati