Comment obtenir un identifiant personnalisé à restituer à l'aide de HtmlHelper dans MVC

StackOverflow https://stackoverflow.com/questions/8147

  •  08-06-2019
  •  | 
  •  

Question

En utilisant aperçu 4 de ASP.NET MVC Codez comme :

<%= Html.CheckBox( "myCheckBox", "Click Here", "True", false ) %>

uniquement les sorties :

<input type="checkbox"  value="True"  name="myCheckBox"  />

Il y a un name là pour le formulaire, je reviens mais non id pour javascript ou étiquettes :-(

J'espérais que le changer en :

Html.CheckBox( "myCheckBox", "Click Here", 
               "True", false, new { id="myCheckBox" } )

fonctionnerait - mais à la place j'obtiens une exception :

System.ArgumentException: An item with the same key has already been added.

Comme s'il y avait déjà une pièce d'identité quelque part dans une collection, je suis perplexe !

L'exception complète pour toute personne intéressée suit (hé, ne serait-il pas bien de joindre des fichiers ici) :

System.ArgumentException: An item with the same key has already been added. 
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Web.Routing.RouteValueDictionary.Add(String key, Object value)
   at System.Web.Mvc.TagBuilder2.CreateInputTag(HtmlInputType inputType, String name, RouteValueDictionary attributes)
   at System.Web.Mvc.CheckBoxBuilder.CheckBox(String htmlName, RouteValueDictionary htmlAttributes)
   at System.Web.Mvc.CheckBoxBuilder.CheckBox(String htmlName, String text, String value, Boolean isChecked, RouteValueDictionary htmlAttributes)
   at System.Web.Mvc.CheckBoxExtensions.CheckBox(HtmlHelper helper, String htmlName, String text, String value, Boolean isChecked, Object htmlAttributes)
   at ASP.views_account_termsandconditions_ascx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in c:\dev\myProject\Views\Account\Edit.ascx:line 108
Était-ce utile?

La solution

Essaye ça:

<%= Html.CheckBox("myCheckbox", "Click here", "True", false, new {_id ="test" })%>

Pour n'importe quel mot-clé, vous pouvez utiliser un trait de soulignement avant le nom de l'attribut.Au lieu de class, vous utilisez _class.Puisque la classe est un mot-clé en C#, ainsi que le nom de l'attribut en HTML.Désormais, "id" n'est pas un mot-clé en C#, mais c'est peut-être dans un autre langage .NET qu'ils souhaitent prendre en charge.D'après ce que je peux dire, ce n'est pas un mot-clé dans VB.NET, F# ou Ruby, donc c'est peut-être une erreur de vous obliger à utiliser un trait de soulignement avec.

Autres conseils

Apparemment, c'est un bug.Parce qu'ils l'ajoutent aux valeurs de rendu potentielles, ils ont simplement oublié de l'inclure.Je recommanderais de créer un bogue sur codeplex, de télécharger la source et de la modifier selon vos besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top