我在MVC视图中有一个表单,其中包含许多文本框,下拉列表和文本区域。我正在使用HTML帮助程序来创建这些控件,包括在适当的位置使用View Data预先填充它们,并通过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, string,string,object)'有一些无效的参数
为了比较,工作正常的TextBox调用是:
Html.TextBox("TelephoneNumberAlternate", ViewData["TelephoneNumberAlternate"], new { @class = "DataEntryStd_TextBox" })
我尝试显式引用TextAreaExtensions.TextArea并包含HtmlHelper参数但是没有区别。
对于info,TextArea调用在没有htmlAttributes参数的情况下工作正常。另外,我已经尝试为类属性指定名称/值字典,但这会遇到完全相同的问题。
任何想法我做错了什么?
答案 0 :(得分:12)
总是让我觉得这些错误消息并没有告诉你哪个参数不匹配。
你试过这个吗?
Html.TextArea("Description", ViewData["Description_Current"].ToString(), new { @class = "DataEntryStd_TextArea" })
我问的原因是ViewData["Description_Current"]
的类型为Object
,并且签名Html.TextArea(String, Object)
存在重载 - 尽管此例中的对象代表html属性。这可能就是为什么在你将html属性添加为第三个参数之前编译器不会抱怨的原因 - 在此之前,第二个参数被允许为Object
,但是只要你添加第三个参数,第二个参数就会成为String
。
答案 1 :(得分:3)
您需要将ViewData [“Description_Current”]强制转换为字符串,因为该方法不需要签名(字符串,字符串,对象)(字符串,对象,对象)。 TextBox有效,因为有一个使用html属性的签名(字符串,对象,对象)。
<%= Html.TextArea( "Name",
(string)ViewData["Value"],
new { @class = "klass" } ) %>
HtmlHelper.TextBox和HtmlHelper.TextArea的文档可在MSDN上找到。