我正在尝试创建一个扩展方法。但我得到:
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/