c# - ASP.Net MVC3 : UrlHelper Extension method requires argument

标签 c# asp.net asp.net-mvc-3

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

No Overload for method MRUrl takes 0 arguments

HtmlHelper.cs:

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

查看:

@MyNS.Helpers.MyHelper.MRUrl()

最佳答案

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

@Url.MRUrl()

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

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

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

@using MyNS.Helpers
@Url.MRUrl()

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

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

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

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

关于c# - ASP.Net MVC3 : UrlHelper Extension method requires argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11049814/

相关文章:

C# 应用程序在检索 youtube 请求时卡住

c# - 通过 View 模型传递信息

c# - 将 WebAPI HttpGet 方法参数重新组合到一个对象中

asp.net - 在 Gridview 中显示同名的两列

c# - ASP.NET 如何访问 Aplication Request 模块中的 User.Identity.IsAuthenticated?

javascript - 从 javascript(无ajax)将字符串参数发送到 Controller (MVC3)

c# - MvcContrib TestHelper 在使用 AssertViewRendered 时给出一个奇怪的错误

c# - 结合 IdentityServer4 和 MVC 客户端

javascript - 排序和过滤器不起作用 - Ngtable

asp.net-mvc-3 - 具有最佳实践的示例N层ASP.NET MVC3应用程序(使用EF 4.1)