【问题标题】:Extending HtmlHelper in .NET 4.0 MVC3 ASPX在 .NET 4.0 MVC3 ASPX 中扩展 HtmlHelper
【发布时间】:2011-10-31 13:56:30
【问题描述】:

我的代码可以在 .NET 3.5 应用程序中运行,但当我在 .NET 4.0 中以相同方式设置它时,它却无法运行。当我尝试扩展 HtmlHelper 时,问题就来了。在 .NET 4.0 MVC3 中,如果我有一个如下所示的页面:

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of IEnumerable (Of MvcApplication2.MyModel))" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <%=Html.MyTest%>
</asp:Content>

还有这样的扩展:

Imports System.Runtime.CompilerServices

Module Extensions

    <Extension()>
    Public Function MyTest(htmlhelper As System.Web.Mvc.HtmlHelper) As String
        Return Now.ToLongTimeString
    End Function

End Module

它不会编译,因为“Html”不再像过去那样属于System.Web.Mvc.HtmlHelper 类型,而是现在属于System.Web.Mvc.HtmlHelper(Of IEnumerable (Of MvcApplication2.MyModel)) 类型。 &lt;%=Html.MyTest%&gt; 上的错误信息是:

'MyTest' is not a member of 'System.Web.Mvc.HtmlHelper(Of System.Collections.Generic.IEnumerable(Of MvcApplication2.MyModel))'.

如何在此配置中扩展 HtmlHelper?我是否在设置中遗漏了导致“Html”与过去不同类型的内容?我没有在网上找到任何关于行为改变的信息,这让我相信我在某个地方做错了什么。

更新:

关于继承自 HtmlHelper 的 HtmlHelper(Of TModel),为什么这段代码不起作用?

Partial Public Class HtmlHelper

    Public Function MyOtherTest() As String
        Return Now.ToLongTimeString
    End Function

End Class

引用 &lt;%=Html.MyOtherTest%&gt; 会产生相同的错误消息。

【问题讨论】:

  • 你找出问题所在了吗?
  • 我怀疑我的 web.config 有问题。我不确定到底是什么,因为我重新转换了我的项目,然后有条不紊地检查了 web.config 以确保我有正确的设置,这一次它工作了(可能是 pages\namespaces 部分)。不过,您的回复使我没有走上完全不同的道路,因此非常感谢。

标签: asp.net-mvc-3 .net-4.0 html-helper


【解决方案1】:

具有类型化模型的视图获得类型化 HTML 帮助器,以便帮助器方法可以使用模型类型。
但是,HtmlHelper(Of TModel) 继承了 HtmlHelper,因此您的代码可以正常工作。

您可能添加了对System.Web.WebPages.dll 的引用,因此扩展方法正在扩展System.Web.WebPages.HtmlHelper,这是一个不同的类。

【讨论】:

  • 没有对 System.Web.WebPages.dll 的引用,并确保我将扩展更新为“Public Function MyTest(htmlhelper As System.Web.Mvc.HtmlHelper) As String”,所以应该没有混淆,但它仍然说 MyTest 不是成员。
  • 不能把参数类型改成(htmlhelper As System.Web.Mvc.HtmlHelper(Of TModel)),即扩展泛型类吗?
  • @Rup:这应该没有必要,因为它继承了HtmlHelper。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多