Как получить пользовательский идентификатор для рендеринга с использованием HtmlHelper в MVC

Использование предварительного просмотра 4 из ASP.NET MVC кодекса , как:

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

только выходы:

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

Там nameесть форма для обратной записи, но нет idдля javascript или ярлыков :-(

Я надеялся, что изменить его на:

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

будет работать - но вместо этого я получаю исключение:

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

Как будто где-то в коллекции уже был идентификатор - я в тупике!

Далее следует полное исключение для всех, кто интересуется (эй - не было бы неплохо прикрепить файлы здесь):

System.ArgumentException: элемент с тем же ключом уже был добавлен. 
   в System.ThrowHelper.ThrowArgumentException (ресурс ExceptionResource)
   at System.Collections.Generic.Dictionary`2.Insert (ключ TKey, значение TValue, логическое добавление)
   в System.Web.Routing.RouteValueDictionary.Add (ключ строки, значение объекта)
   в System.Web.Mvc.TagBuilder2.CreateInputTag (HtmlInputType inputType, имя строки, атрибуты RouteValueDictionary)
   в System.Web.Mvc.CheckBoxBuilder.CheckBox (String htmlName, RouteValueDictionary htmlAttributes)
   в System.Web.Mvc.CheckBoxBuilder.CheckBox (String htmlName, String text, String value, логическое значение isChecked, RouteValueDictionary htmlAttributes)
   в System.Web.Mvc.CheckBoxExtensions.CheckBox (HtmlHelper helper, String htmlName, текст String, строковое значение, логическое isChecked, объект htmlAttributes)
   в ASP.views_account_termsandconditions_ascx .__ Render__control1 (HtmlTextWriter __w, Control parameterContainer) в c: \ dev \ myProject \ Views \ Account \ Edit.ascx: строка 108
11.08.2008 19:54:20
2 ОТВЕТА
РЕШЕНИЕ

Попробуй это:

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

Для любого ключевого слова вы можете использовать подчеркивание перед именем атрибута. Вместо класса вы используете _class. Так как класс является ключевым словом в C #, а также именем атрибута в HTML. Теперь, «id» не является ключевым словом в C #, но, возможно, это другой язык .NET, который они хотят поддерживать. Из того, что я могу сказать, это не ключевое слово в VB.NET, F # или Ruby, поэтому, возможно, это ошибка, что они заставляют вас использовать подчеркивание с ним.

5
11.08.2008 23:21:39
где это описано в документации?
Jeff Martin 20.02.2010 19:11:11
Я не знаю, если это в документации. Я не мог найти это. Я думаю, что только что прочитал это в блоге Фила Хаакса. Кроме того, я думаю, что префикс был изменен на знак @ со знака подчеркивания, поэтому попробуйте «new {@ id =« test »}, если вышеприведенное не сработает»
Lance Fisher 20.02.2010 23:02:38

Видимо это ошибка. Поскольку они добавляют его к потенциальным значениям рендеринга, они просто забыли включить его. Я бы порекомендовал создать ошибку в codeplex, скачать исходный код и изменить его для своих нужд.

0
11.08.2008 20:12:48