Как вы получаете пользовательский идентификатор для рендеринга с помощью HtmlHelper в MVC
-
08-06-2019 - |
Вопрос
Используя предварительный просмотр 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
Решение
Попробуй это:
<%= Html.CheckBox("myCheckbox", "Click here", "True", false, new {_id ="test" })%>
Для любого ключевого слова вы можете использовать знак подчеркивания перед именем атрибута.Вместо class вы используете _class .Поскольку class - это ключевое слово в C #, а также имя атрибута в HTML.Теперь "id" не является ключевым словом в C #, но, возможно, оно есть в другом языке .NET, который они хотят поддерживать.Из того, что я могу сказать, это не ключевое слово в VB.NET, F # или Ruby, поэтому, возможно, это ошибка, что они заставляют вас использовать с ним символ подчеркивания.
Другие советы
Очевидно, это ошибка.Поскольку они добавляют его к потенциальным значениям рендеринга, они просто забыли включить его.Я бы порекомендовал создать ошибку в codeplex, загрузить исходный код и изменить его под свои нужды.