2009-06-05 3 views
4

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

Это работает отлично с элементами управления 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. Кроме того, я попытался указать словарь имени/значения для атрибута класса, однако это страдает той же проблемой.

Любые идеи, что я делаю неправильно?

+0

Удивительные работы ребята. Надо любить тот факт, что сообщество SO настолько быстро, что проблемы, которые я не могу решить самостоятельно, не особенно влияют на мой день! Благодаря! :) – Timbo

ответ

12

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

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

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

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

3

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

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

Docs для HtmlHelper.TextBox и HtmlHelper.TextArea доступны на сайте MSDN.

Смежные вопросы