Como você obtém um ID personalizado para renderizar usando HtmlHelper no MVC

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

  •  08-06-2019
  •  | 
  •  

Pergunta

Usando visualização 4 de ASP.NET MVC Código como:

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

apenas saídas:

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

Existe um name lá para o formulário postar de volta, mas não id para javascript ou rótulos :-(

Eu esperava que mudasse para:

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

funcionaria - mas em vez disso recebo uma exceção:

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

Como se já existisse um id em algum lugar de uma coleção - estou perplexo!

A exceção completa para qualquer pessoa interessada segue (ei, não seria bom anexar arquivos aqui):

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
Foi útil?

Solução

Experimente isto:

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

Para qualquer palavra-chave você pode usar um sublinhado antes do nome do atributo.Em vez de classe você usa _class.Já que class é uma palavra-chave em C# e também o nome do atributo em HTML.Agora, "id" não é uma palavra-chave em C#, mas talvez esteja em outra linguagem .NET que eles desejam oferecer suporte.Pelo que posso dizer, não é uma palavra-chave em VB.NET, F # ou Ruby, então talvez seja um erro forçarem você a usar um sublinhado.

Outras dicas

Aparentemente, isso é um bug.Como eles estão adicionando-o a possíveis valores de renderização, eles simplesmente se esqueceram de incluí-lo.Eu recomendaria criar um bug no codeplex, baixar o código-fonte e modificá-lo de acordo com suas necessidades.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top