ASP.Net MVC3:UrlHelper 扩展方法需要参数

本文关键字:方法 参数 扩展 UrlHelper Net MVC3 ASP | 更新日期: 2023-09-27 18:37:13

我正在尝试创建一个扩展方法。但我得到:

方法 MRUrl 没有重载,需要 0 个参数

HtmlHelper.cs:

namespace MyNS.Helpers
{
   public class MyHelper
   {
    public static string MRUrl(this UrlHelper url)
    {
         return "blah"
    }
  }
}

视图:

@MyNS.Helpers.MyHelper.MRUrl()

ASP.Net MVC3:UrlHelper 扩展方法需要参数

您没有正确调用扩展方法。它应该是:

@Url.MRUrl()

在使用扩展方法之前,请阅读扩展方法在 C# 中的工作原理:http://msdn.microsoft.com/en-us/library/bb383977.aspx

扩展

方法扩展给定类型(在您的情况下UrlHelper),并在此类型的实例上调用。因此,由于在您的视图中,您已经有一个 UrlHelper 实例(在整个 Url 属性中),因此您可以直接在其上调用扩展方法。

在能够调用扩展方法之前,您需要通过添加定义其包含类的命名空间将其纳入范围:

@using MyNS.Helpers
@Url.MRUrl()

此外,扩展方法必须在静态类中声明。您的 C# 代码甚至无法编译。所以修复它:

namespace MyNS.Helpers
{
    public static class HtmlHelper // Bad name choice I know.
    {
        public static string MRUrl(this UrlHelper url)
        {
            return "blah";
        }
    }
}

所有这些都是标准的C#,与MVC或Razor无关 ASP.NET。

现在 ASP.NET 特定于 MVC 的东西:如果您想避免必须将命名空间带入每个视图的范围(@using MyNS.Helpers),您可以将其添加到~/Views/web.config文件的 <namespaces> 标记中(不要与 ~/web.config 混淆)。