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

Использование Предварительный просмотр 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: 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

Ответы [ 2 ]

5 голосов
/ 12 августа 2008

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

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

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

0 голосов
/ 12 августа 2008

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

...