Проблема перегрузки MVC Html.TextArea - PullRequest
4 голосов
/ 05 июня 2009

У меня есть форма в виде MVC, которая содержит несколько текстовых полей, выпадающих списков и текстовых областей. Я использую помощник HTML для создания этих элементов управления, включая предварительное заполнение их View View, где это необходимо, и применение стилей с помощью параметра htmlAttributes.

Это работает нормально с элементами управления TextBox, DropDownLists и т. Д., Однако, когда я добавляю htmlAttributes в TextArea, он перестает работать, утверждая, что лучший перегруженный метод имеет недопустимые аргументы, код которого не работает:

Html.TextArea("Description", ViewData["Description_Current"], new { @class = "DataEntryStd_TextArea" })

Полученная ошибка:

'System.Web.Mvc.HtmlHelper' не содержит определения для 'TextArea' и лучший метод расширения перегрузки «System.Web.Mvc.Html.TextAreaExtensions.TextArea (System.Web.Mvc.HtmlHelper, строка, строка, объект) 'имеет недопустимые аргументы

Для сравнения, все нормально работающие вызовы TextBox:

Html.TextBox("TelephoneNumberAlternate", ViewData["TelephoneNumberAlternate"], new { @class = "DataEntryStd_TextBox" })

Я пытался явно ссылаться на TextAreaExtensions.TextArea и включать аргумент HtmlHelper, однако это не имело никакого значения.

Для справки, вызов TextArea работает без параметра htmlAttributes. Кроме того, я попытался указать словарь имя / значение для атрибута класса, но это та же проблема.

Есть идеи, что я делаю не так?

Ответы [ 2 ]

12 голосов
/ 05 июня 2009

Меня всегда беспокоит, что эти сообщения об ошибках не сообщают вам , какой из аргументов не совпадает.

Вы пробовали это?

Html.TextArea("Description", ViewData["Description_Current"].ToString(), new { @class = "DataEntryStd_TextArea" })

Причина, по которой я спрашиваю, состоит в том, что ViewData["Description_Current"] имеет тип Object, и существует перегрузка с подписью Html.TextArea(String, Object) - хотя объект в этом случае представляет атрибуты html. Это может быть причиной того, что компилятор не будет жаловаться, пока вы не добавите атрибуты html в качестве третьего параметра - до тех пор второй параметр может иметь значение Object, но как только вы добавите третий параметр, второй должен быть String.

3 голосов
/ 05 июня 2009

Вам необходимо преобразовать ViewData ["Description_Current"] в строку, так как метод требует подписи (строка, строка, объект), а не (строка, объект, объект). TextBox работает, потому что есть подпись, использующая html-атрибуты (строка, объект, объект).

<%= Html.TextArea( "Name",
                   (string)ViewData["Value"],
                   new { @class = "klass" } ) %>

Документы для HtmlHelper.TextBox и HtmlHelper.TextArea доступны в MSDN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...