我正在尝试为我的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'
起初我认为这很简单,不添加引用(Import语句),但似乎并非如此。对我来说真的很奇怪的是,我可以在同一个项目中向HtmlHelper对象添加扩展方法而不会出现问题。
提前感谢您提供的任何帮助。
答案 0 :(得分:1)
.NET中的扩展方法应该在对象实例上调用,而不是在类本身上调用(即使它们是静态的)。
所以而不是:
<%= UrlHelper.Image("test") %>
尝试:
<%= Url.Image("test") %>