Come ottenere un id personalizzato per il rendering utilizzando HtmlHelper in MVC
-
08-06-2019 - |
Domanda
Utilizzando anteprima 4 di ASP.NET MVC Codice simile a:
<%= Html.CheckBox( "myCheckBox", "Click Here", "True", false ) %>
solo uscite:
<input type="checkbox" value="True" name="myCheckBox" />
C'è un name
c'è la forma di post indietro, ma non id
per il javascript o di etichette :-(
Speravo che cambiando di:
Html.CheckBox( "myCheckBox", "Click Here",
"True", false, new { id="myCheckBox" } )
dovrebbe funzionare - ma invece ottengo un'eccezione:
System.ArgumentException: An item with the same key has already been added.
Come se ci fosse già un id da qualche parte in una collezione da qualche parte - sono perplesso!
L'intero eccezione per chiunque sia interessato segue (hey - non sarebbe bello per allegare i file qui):
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
Soluzione
Prova questo:
<%= Html.CheckBox("myCheckbox", "Click here", "True", false, new {_id ="test" })%>
Per qualsiasi parola chiave, è possibile utilizzare un carattere di sottolineatura prima il nome dell'attributo.Invece di classe si usa _class.Dal momento che la classe è una parola chiave in C#, e anche il nome dell'attributo in HTML.Ora, "id" non è una parola chiave in C#, ma forse è in un altro .NET lingua che si desidera supportare.Da quello che posso dire, non è una parola chiave in VB.NET F#, o Ruby è così forse è un errore che hanno la forza di carattere di sottolineatura con esso.
Altri suggerimenti
A quanto pare questo è un bug.Perché sono aggiunta ai potenziali rendering valori, si sono semplicemente dimenticati di includere.Vorrei raccomandare la creazione di un bug su codeplex, e scaricare il sorgente e modificarlo per le tue esigenze.