在.NET 4.0 MVC3 ASPX中扩展HtmlHelper

时间:2011-10-31 13:56:30

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

我在.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))类型。 <%=Html.MyTest%>上的错误消息是:

'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

引用<%=Html.MyOtherTest%>会产生相同的错误消息。

1 个答案:

答案 0 :(得分:3)

使用类型模型的视图获取类型化HTML帮助程序,以便辅助方法可以使用模型类型 但是,HtmlHelper(Of TModel)会继承HtmlHelper,因此您的代码可以正常运行。

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