Attributi html con trattino con asp.net mvc


111

Esiste una sintassi migliore quando si creano elementi con attributi sillabati invece di usare:

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

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

Ad esempio, HTML 5 propone che gli attributi personalizzati abbiano il prefisso data-e WIA ARIA utilizza il aria-prefisso per tutti gli attributi WIA ARIA.

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 c'è supporto per i trattini 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 modificare la funzionalità delle estensioni HTML di ASP.NET MVC senza dover riscrivere l'intera estensione?

Risposte:


202

Usa un trattino basso nel nome dell'attributo di dati e lo gestirà magicamente per te, convertendolo in un trattino. Sa che vuoi un trattino piuttosto che un trattino basso poiché i trattini bassi non sono validi nei nomi degli attributi html.

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

2
Ho trovato un problema simile con diverse domande SO, e questa è la risposta migliore.
user2780436

Potresti aggiungere il motivo per cui i trattini bassi dell'istruzione non sono validi negli attributi html . Almeno html 4.01 afferma : il valore dell'attributo può contenere solo lettere (az e AZ), cifre (0-9), trattini (ASCII decimale 45), punti (ASCII decimale 46), trattini bassi (ASCII decimale 95) e due punti ( ASCII decimale 58) ,
surfmuggle

@threeFourOneSixOneThree la tua citazione si riferisce al valore dell'attributo, ma in questa domanda ci riferiamo ai nomi degli attributi.
ED-209

@threeFourOneSixOneThree Ho cambiato la fine della mia risposta in "i trattini bassi non sono validi nei nomi degli attributi html"
ED-209

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.