UrlHelper 扩展方法不起作用

发布于 2024-09-12 10:26:04 字数 1480 浏览 10 评论 0原文

我正在尝试向我的 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 对象添加扩展方法,而不会出现问题。

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

I'm trying to add an extension method to my MVC 2 project without success and after several hours of googling and looking here I'm at a loss. I've created a brand new MVC 2 project to make sure there was not anything weird about my existing project and I'm still facing the same problem. I'm sure this is a situation of I "can't see the forest for the trees" so any help would be greatly appreciated. Here is the code for the extension method.

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);
        }

    }
}

and here is the code in the view (standard home index view created by default for a new MVC 2 project)

<%@ 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>

In design mode, when I type UrlHelper, intellisense does not show my extension method Image and if I run the project I get the following error:

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

At first I thought it was as simple as not adding a reference (Import statement), but that does not appear to be the case. The really weird thing to me is that I can add extension methods to the HtmlHelper object without issue in this same project.

Thanks in advance for any help provided.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

过度放纵 2024-09-19 10:26:04

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

因此,不要:

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

尝试:

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

Extension methods in .NET should be invoked on an object instance and not on the class itself (even though they are static).

So instead of:

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

try:

<%= Url.Image("test") %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文