为啥我升级到 MVC3 后我的自定义 HtmlHelpers 停止工作?

Posted

技术标签:

【中文标题】为啥我升级到 MVC3 后我的自定义 HtmlHelpers 停止工作?【英文标题】:Why did my custom HtmlHelpers stop working after I upgraded to MVC3?为什么我升级到 MVC3 后我的自定义 HtmlHelpers 停止工作? 【发布时间】:2011-02-23 22:32:59 【问题描述】:

我刚刚完成了这份清单以将我的 asp.net mvc2 站点升级到 mvc3:http://www.asp.net/learn/whitepapers/mvc3-release-notes#upgrading

一切都在编译,但是当我运行应用程序时,视图中出现错误。

示例视图:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/site.Master" Inherits="System.Web.Mvc.ViewPage<Genesis.Domain.Entities.StreamEntry>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    <%: Model.seTitle %>
</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="MetaContent" runat="server">
    <%: html.GetMetaTag("description", Model.seDescription )%>
    <%: Html.GetMetaTag("keywords", Model.seKeywords )%>
</asp:Content>

<asp:Content ID="Content4" ContentPlaceHolderID="HeadlineContent" runat="server">
    <%: Model.seHeadline %>
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <p>
        <%//: Html.AddThis() %>
    </p>
    <p>
        Created: <br /><strong><%: Model.seDateCreated %></strong><br />
        Last Modified: <br /><strong><%: Model.seDateModified %></strong>


    </p>
    <%: MvcHtmlString.Create(Model.seBody) %>

    <% Html.RenderAction("Comments", "Comments", new  streamEntryID = Model.seID, allowComments = Model.AllowComments ); %>

</asp:Content>

错误文本:

Compilation Error 
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS1061: 'System.Web.Mvc.HtmlHelper<Genesis.Domain.Entities.StreamEntry>' does not contain a definition for 'GetMetaTag' and no extension method 'GetMetaTag' accepting a first argument of type 'System.Web.Mvc.HtmlHelper<Genesis.Domain.Entities.StreamEntry>' could be found (are you missing a using directive or an assembly reference?)

Source Error:



Line 6:  
Line 7:      <asp:Content ID="Content3" ContentPlaceHolderID="MetaContent" runat="server">
Line 8:          <%: Html.GetMetaTag("description", Model.seDescription )%>
Line 9:          <%: Html.GetMetaTag("keywords", Model.seKeywords )%>
Line 10:     </asp:Content>

如何让我的视图再次识别我的自定义 html 助手?

【问题讨论】:

【参考方案1】:

尝试在视图顶部添加Import 指令,看看是否有任何不同:

<%@ Import Namespace="Namespace.Of.The.Class.Containing.The.Helper" %>

您还可以将此命名空间添加到 web.config 的 &lt;namespaces&gt; 部分。

【讨论】:

我可以将它添加到根配置文件吗? @quakkels,是的,如果您使用的是 WebForms 视图引擎,如果您使用的是 Razor 视图引擎,则不是(在这种情况下,它应该是 ~/Views/web.config)。 酷,我将切换到 Razor ......但现在它的 aspx。 @quakkels,这有点奇怪。如果这解决了它,您的代码也不会在 ASP.NET MVC 2.0 上运行。或者可能在升级过程中出现了一些问题。

以上是关于为啥我升级到 MVC3 后我的自定义 HtmlHelpers 停止工作?的主要内容,如果未能解决你的问题,请参考以下文章

为啥升级到 Symfony 4.4 后我不再看到错误预览页面?

为啥我的自定义 Swift 类没有转移到我的 GameScene [关闭]

asp.net MVC3 上的自定义错误页面

升级后我的 npm 完全损坏 - '无法读取未定义的属性'get''

为啥我的自定义 process.env 在 dotenv 中不起作用?

升级到 Xcode 8 后我的游戏停止工作