【问题标题】:UrlHelper extension method not workingUrlHelper 扩展方法不起作用
【发布时间】:2010-07-31 12:57:11
【问题描述】:

我试图在我的 MVC 2 项目中添加一个扩展方法,但没有成功,经过几个小时的谷歌搜索和查看这里,我不知所措。我创建了一个全新的 MVC 2 项目,以确保我现有的项目没有任何奇怪的地方,而且我仍然面临同样的问题。我确信这是我“只见树木不见森林”的情况,因此我们将不胜感激。这是扩展方法的代码。

using System.Web.Mvc;

namespace ExtensionTest.Helper
{
    public static class UrlExtensions
    {
        public static string Image(this UrlHelper helper, string fileName)
        {
            return helper.Content("~/Content/Images/" + fileName);
        }

    }
}

这是视图中的代码(默认为新的 MVC 2 项目创建的标准主页索引视图)

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="ExtensionTest.Helper" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <%= UrlHelper.Image("test") %>
    <h2><%: ViewData["Message"] %></h2>
    <p>
        To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
    </p>
</asp:Content>

在设计模式下,当我输入 UrlHelper 时,intellisense 不显示我的扩展方法 Image,如果我运行项目,我会收到以下错误:

CS0117: 'System.Web.Mvc.UrlHelper' does not contain a definition for 'Image'

起初我以为它就像不添加引用(导入语句)一样简单,但事实并非如此。对我来说真正奇怪的是,我可以在同一个项目中向 HtmlHelper 对象添加扩展方法而不会出现问题。

提前感谢您提供的任何帮助。

【问题讨论】:

  • 在非常忙碌的一天中,如果不尝试构建测试,我没有直接的解决方案……但是您是否尝试过将辅助函数重命名为显然比“图像”更不常见/不明显的东西……也许“MyImage”或“TestImage”看看结果是否不同?

标签: asp.net-mvc-2 extension-methods urlhelper


【解决方案1】:

.NET 中的扩展方法应该在对象实例上调用,而不是在类本身上调用(即使它们是静态的)。

所以而不是:

<%= UrlHelper.Image("test") %>

尝试:

<%= Url.Image("test") %>

【讨论】:

  • 哈哈!绝对是为了树木而错过森林的场景。好尴尬……谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多