我在.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%>
会产生相同的错误消息。
答案 0 :(得分:3)
使用类型模型的视图获取类型化HTML帮助程序,以便辅助方法可以使用模型类型
但是,HtmlHelper(Of TModel)
会继承HtmlHelper
,因此您的代码可以正常运行。
您可能已添加对System.Web.WebPages.dll
的引用,因此扩展方法正在扩展System.Web.WebPages.HtmlHelper
,这是一个不同的类。