2010-11-09 5 views
4

J'ai entendu de plusieurs sources différentes que lorsque vous utilisez des assistants HTML dans ASP.NET MVC2, vous pouvez créer des attributs personnalisés avec des tirets (par exemple <). rowId = "5" >) en utilisant un trait de soulignement à la place du tiret, et lorsque le code HTML est écrit sur la page, les traits de soulignement seront remplacés par des tirets.ASP.NET MVC2 Ne pas remplacer les traits de soulignement par des tirets dans HtmlAttributes

Donc, quelque chose comme ceci:

<%= HtmlActionLink(Model.Name, "MyView", null, new {data_rowId = Model.id}) %> 

devrait rendre comme

<a data-rowId="0" href="myURL">Row Name</a> 

Mais ... ce n'est pas. Je pense que cette fonctionnalité est peut-être activée uniquement dans l'aperçu MVC3 Beta (comme mentionné dans les notes de version de l'aperçu MVC3), mais this thread est à peu près la même chose, et il s'agit de MVC2. Je sais que je peux utiliser l'autre solution présentée dans ce fil, mais je préfère ne pas avoir recours à l'utilisation du dictionnaire si une solution plus élégante existe.

Quelqu'un sait s'il y a quelque chose de simple que je peux faire pour que ça fonctionne?

Répondre

4

Pas exactement le plus élégant solution mais probablement acceptable:

<%= Html.ActionLink(
    Model.Name, 
    "MyView", 
    null, 
    new Dictionary<string, string> { { "data-rowId", Model.id } } 
) %> 

Sur une note latérale: data-rowId est un attribut totalement invalide en HTML selon doctypes standards alors peut-être la solution la plus élégante serait de se débarrasser de it :-)

+2

L'attribut Data-data est valide pour HTML 5. http://dev.w3.org/html5/spec/elements.html#embedding-custom-non-visible-data –

+0

@Erik Philips, HTML5 est encore un brouillon et non pris en charge par tous les navigateurs, mais bon point. –

+0

Je souhaite que ce n'était pas la réponse, mais ne peut pas trouver une meilleure approche. Je pensais avoir vu quelque part que les underscores étaient promus à des tirets ... eh bien! – Jafin

0

Pensez à ce que ASP.NET MVC est conçu pour faire. Il est conçu pour vous donner un contrôle strict sur le HTML que vous produisez. Si quelque chose n'est pas accessible, vous n'aurez pas à sauter dans des cerceaux pour le réparer. Ce que vous essayez de faire est de créer un code HTML invalide ou XHTML. Au lieu d'essayer de rendre HTML invalide, simplifiez simplement en utilisant un identifiant. # 1 sur les directives d'accessibilité est que le HTML est valide pour le type déclaré.

Tant que l'ID est unique dans le document, vous aurez satisfait à la conformité HTML - et il sera beaucoup plus facile de manipuler avec jQuery.

Si je peux, pourquoi essayez-vous de créer du HTML invalide? Ou est-ce un format XML propriétaire?

BTW, MVC 3 RC est sorti aujourd'hui.


Modifier:

Jouer avec fonctionnalités HTML5, alors que "brillant" et kool, sont instables. De nombreuses parties de la spécification changent aussi souvent que chaque semaine. Ce qui est considéré comme bon maintenant peut ne pas être bon lorsque la spécification finale est publiée. MVC 3 a certaines choses qui rendront votre travail plus convivial, pour l'instant vous devez utiliser un dictionnaire.

+0

Nous utilisons le nouveau doctype HTML5, qui permet des attributs de données personnalisés sur n'importe quel élément html, tant que le format est "data-whatever". C'est totalement HTML valide. http://html5doctor.com/html5-custom-data-attributes/ – Isochronous

+0

Deux choses à considérer: "id" est plus approprié que data-rowId, et l'attribut est toujours invalide (pas de majuscules selon la spécification). Au lieu de cela, il devrait être "data-row-id". La méthode de dictionnaire est la seule méthode disponible dans MVC 2 pour faire ce que vous voulez. –

+0

Je ne peux pas utiliser "id" car il peut y avoir deux listes différentes sur la page, chacune avec différents ensembles de données, et il peut y avoir une ligne dans une liste qui a le même identifiant qu'une ligne dans la deuxième liste. Je suis conscient que la spécification HTML5 est à peine finalisée, mais les attributs de données personnalisés semblent être une partie assez stable de la spécification. De plus, la décision d'utiliser HTML5 est venue de mon chef de service, alors je ne vais pas lui dire qu'il essaie d'être «brillant» et «kool». Je préférerais des réponses avec un peu moins de condescendance, mais merci quand même. – Isochronous

3

System.Web.Mvc.HtmlHelper fournit une méthode statique qui fait ce que vous cherchez:

<%= Html.ActionLink(
    Model.Name, 
    "MyView", 
    null, 
    HtmlHelper.AnonymousObjectToHtmlAttributes(new { data_row_id: Model.id }) 
) %> 

Cette méthode remplacera souligne des traits d'union - comme quelqu'un a fait remarquer que, assurez-vous d'utiliser des noms d'attributs en minuscules, qui sont compatibles avec HTML5.

Questions connexes