Come ottenere un id personalizzato per il rendering utilizzando HtmlHelper in MVC

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

  •  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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top