2010-07-31 94 views
2

我想添加一个扩展方法到我的MVC 2项目没有成功,经过几个小时的谷歌搜索和看这里我很茫然。我创建了一个全新的MVC 2项目,以确保我的现有项目没有任何不寻常之处,而且我仍面临同样的问题。我敢肯定,这是我“无法看到树林的森林”的情况,所以任何帮助将不胜感激。这是扩展方法的代码。UrlHelper扩展方法不起作用

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,智能感知不显示的代码我的扩展方法形象,如果我跑的项目,我得到以下错误:

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

起初我还以为是那么简单,不添加引用(import语句),但不会出现是这样的。对我来说真的很奇怪的是,我可以在同一个项目中将扩展方法添加到HtmlHelper对象中,而不会出现问题。

在此先感谢您提供的任何帮助。

+0

我有没有尝试在一天中一个非常繁忙的测试,建立没有立即的解决方案......但你试过重命名的辅助函数到显然比“Image”更不常见/更明显的东西......也许是“MyImage”或“TestImage”来查看结果是否不同? – JcMaltaDev 2010-07-31 13:02:39

回答

1

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

所以不是:

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

尝试:

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

哈哈!肯定缺少树木场景的森林。多么尴尬......谢谢! – 2010-07-31 14:53:41