【问题标题】:MVC Html.TextArea overload issueMVC Html.TextArea 重载问题
【发布时间】:2009-06-05 13:59:04
【问题描述】:

我在 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 参数,但这没有任何区别。

有关信息,TextArea 调用在没有 htmlAttributes 参数的情况下可以正常工作。此外,我尝试为类属性指定名称/值字典,但这会遇到完全相同的问题。

任何想法我做错了什么?

【问题讨论】:

  • 很棒的工作人员。不得不喜欢这样一个事实,即 SO 社区如此之快,以至于我无法单独解决的问题不会对我的一天产生特别影响!谢谢! :)

标签: .net asp.net-mvc


【解决方案1】:

这些错误消息并没有告诉你哪一个参数不匹配,这总是让我感到困扰。

你试过了吗?

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

我问的原因是ViewData["Description_Current"]Object 类型,并且签名Html.TextArea(String, Object) 存在重载——尽管在这种情况下对象代表html 属性。这可能就是为什么编译器在您将 html 属性添加为第三个参数之前不会抱怨的原因 - 在那之前,第二个参数被允许为Object,但是一旦您添加第三个参数,第二个必须是String

【讨论】:

    【解决方案2】:

    您需要将 ViewData["Description_Current"] 转换为字符串,因为该方法需要签名 (string, string, object) 而不是 (string, object, object)。文本框之所以有效,是因为有一个使用 html 属性的签名,该属性采用(字符串、对象、对象)。

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

    HtmlHelper.TextBoxHtmlHelper.TextArea 的文档可在 MSDN 上找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      相关资源
      最近更新 更多