MVC Html.TextArea超载问题

时间:2009-06-05 13:59:05

标签: .net asp.net-mvc

我在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参数的情况下工作正常。另外,我已经尝试为类属性指定名称/值字典,但这会遇到完全相同的问题。

任何想法我做错了什么?

2 个答案:

答案 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.TextBoxHtmlHelper.TextArea的文档可在MSDN上找到。