Există un name pentru postarea înapoi a formularului, dar nu id pentru JavaScript sau"> Există un name pentru postarea înapoi a formularului, dar nu id pentru JavaScript sau"> Există un name pentru postarea înapoi a formularului, dar nu id pentru JavaScript sau" />

Cum obțineți un ID personalizat pentru a face folosind HtmlHelper în MVC

Utilizând previzualizare 4 a ASP.NET MVC Cod ca:

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

ieșiri numai:

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

Există un name pentru postarea înapoi a formularului, dar nu id pentru JavaScript sau etichete :-(

Speram să-i schimbăm:

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

ar funcționa - dar, în schimb, am o excepție:

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

Ca și cum ar fi existat deja un id undeva într-o colecție undeva - m-am lovit!

Excepția totală pentru oricine interesat urmează (hei - nu ar fi frumos să atașați fișiere aici):

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
0
fr hi bn

2 răspunsuri

Se pare că acesta este un bug. Deoarece îl adaugă la valorile potențiale de randare, au uitat să o includă. Aș recomanda crearea unui bug pe codeplex și descărcați sursa și modificați-o pentru nevoile dvs.

0
adăugat

Incearca asta:

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

Pentru orice cuvânt cheie, puteți utiliza un subliniere înainte de numele atributului. În loc de clasă, utilizați _class. Deoarece clasa este un cuvânt cheie în C#, precum și numele atributului în HTML. Acum, "id" nu este un cuvânt cheie în C#, dar poate că este într-o altă limbă .NET pe care doresc să o susțină. Din câte vă pot spune, nu este un cuvânt cheie în VB.NET, F # sau Ruby, deci poate că este o greșeală pe care o obligă să folosiți un subliniere cu ea.

0
adăugat
Nu știu dacă este în documentație. N-am găsit-o. Cred că tocmai l-am citit pe blogul lui Phil Haacks. De asemenea, cred că prefixul a fost schimbat la un @ de la un underscore, așa că încercați "new {@ id =" test "} dacă cele de mai sus nu funcționează.
adăugat autor Lance Fisher, sursa
unde este aceasta descrisă în documentație?
adăugat autor Jeff Martin, sursa