2008-08-11 6 views
6

En utilisant preview 4 de ASP.NET MVC code comme:Comment obtenez-vous un code personnalisé pour rendre l'utilisation HtmlHelper dans MVC

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

sorties uniquement:

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

Il y a là name pour la forme post retour mais pas id pour javascript ou étiquettes :-(

J'espérais que le changer en:

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

fonctionnerait - mais j'obtenir une exception:

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

Comme s'il y avait déjà un identifiant quelque part dans une collection quelque part - je suis perplexe!

L'exception complète pour toute personne intéressée suit (hey - serait-il pas agréable 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

Répondre

5

Essayez ceci:

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

Pour un mot clé, vous pouvez utiliser un trait de soulignement avant le nom de l'attribut. Au lieu de classe, vous utilisez _class. Puisque class est un mot-clé en C#, et aussi le nom de l'attribut en HTML. Maintenant, "id" n'est pas un mot-clé en C#, mais peut-être que c'est dans un autre langage .NET qu'ils veulent supporter. D'après ce que je peux dire, ce n'est pas un mot-clé dans VB.NET, F #, ou Ruby alors c'est peut-être une erreur qu'ils vous forcent à utiliser un trait de soulignement.

+0

où est-ce décrit dans la documentation? –

+1

Je ne sais pas si c'est dans la documentation. Je ne pouvais pas le trouver. Je pense que je viens de le lire sur le blog de Phil Haacks. Aussi, je pense que le préfixe a été changé en @ à partir d'un trait de soulignement, alors essayez "new {@ id =" test "} si ce qui précède ne fonctionne pas. –

0

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

Questions connexes