¿Cómo se obtiene una identificación personalizada para renderizar usando HtmlHelper en MVC?

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

  •  08-06-2019
  •  | 
  •  

Pregunta

Usando vista previa 4 de ASP.NETMVC Código como:

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

solo salidas:

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

Hay un name allí para la publicación del formulario, pero no id para javascript o etiquetas :-(

Esperaba que cambiarlo a:

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

funcionaría, pero en su lugar aparece una excepción:

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

Como si ya hubiera una identificación en algún lugar de una colección, ¡estoy perplejo!

A continuación se muestra la excepción completa para cualquier persona interesada (oye, ¿no sería bueno adjuntar archivos aquí):

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
¿Fue útil?

Solución

Prueba esto:

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

Para cualquier palabra clave, puede utilizar un guión bajo antes del nombre del atributo.En lugar de clase usas _class.Dado que clase es una palabra clave en C# y también el nombre del atributo en HTML.Ahora, "id" no es una palabra clave en C#, pero tal vez esté en otro lenguaje .NET que quieran admitir.Por lo que puedo decir, no es una palabra clave en VB.NET, F# o Ruby, por lo que tal vez sea un error que te obliguen a usar un guión bajo con ella.

Otros consejos

Aparentemente esto es un error.Debido a que lo están agregando a los valores de representación potenciales, simplemente se olvidaron de incluirlo.Recomendaría crear un error en Codeplex, descargar la fuente y modificarla según sus necesidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top