Atributos html hifenizados com asp.net mvc

111

Existe uma sintaxe mais agradável ao criar elementos com atributos hifenizados em vez de usar:

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

Olhando para as especificações HTML para os padrões propostos HTML 5 e WIA ARIA , parece que os hifens nos atributos HTML estão sendo planejados para serem mais comuns como uma espécie de espaçamento simples entre nomes.

Por exemplo, o HTML 5 propõe que os atributos personalizados são prefixados com data-e WIA ARIA usa o aria-prefixo para todos os atributos WIA ARIA.

Ao usar ajudantes HTML na ASP.NET MVC, como <%= Html.TextBox("name", value, new { attribute = attributeValue }) %>o objeto anônimo é convertido em um dicionário.

Infelizmente, em C # não há suporte para hifens nos nomes, então a única alternativa é criar um dicionário. A sintaxe para a qual é muito prolixa, alguém viu uma alternativa melhor ou uma maneira simples de alterar a funcionalidade das extensões HTML do ASP.NET MVC sem ter que reescrever a extensão inteira?

Chris Chilvers
fonte

Respostas:

202

Use um sublinhado no nome do atributo de dados e ele o tratará magicamente para você, convertendo-o em um hífen. Ele sabe que você deseja um hífen em vez de um sublinhado, pois os sublinhados não são válidos em nomes de atributos html.

<%= Html.TextBox("name", value, new { @data_foo = "bar"}) %>
ED-209
fonte
2
Encontrei um problema semelhante em várias questões do SO, e esta é a melhor resposta.
user2780436
Você poderia adicionar o motivo para sua declaração, os sublinhados não são válidos em atributos html . Pelo menos html 4.01 estados : O valor do atributo pode conter apenas letras (az e AZ), dígitos (0-9), hífens (ASCII decimal 45), pontos (ASCII decimal 46), sublinhados (ASCII decimal 95) e dois pontos ( ASCII decimal 58) ,
surfmuggle
@threeFourOneSixOneThree sua citação se refere ao valor do atributo, mas nesta questão estamos nos referindo a nomes de atributos.
ED-209 de
@threeFourOneSixOneThree Eu mudei o final da minha resposta para 'sublinhados não são válidos em nomes de atributos html'
ED-209
19

A resposta fornecida em ActionLink htmlAttributes sugere o uso de sublinhados em vez de hifens. MVC.Net deve emitir hifens em vez de sublinhados ao enviar a página para o navegador.

Zarefete
fonte