我正在尝试创建一个扩展方法。但我明白了:
方法
MRUrl
没有重载需要0个参数
HtmlHelper.cs:
namespace MyNS.Helpers
{
public class MyHelper
{
public static string MRUrl(this UrlHelper url)
{
return "blah"
}
}
}
查看:
@MyNS.Helpers.MyHelper.MRUrl()
答案 0 :(得分:15)
您没有正确调用扩展方法。它应该是:
@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#,与ASP.NET MVC或Razor无关。
现在特定于ASP.NET MVC:如果您想避免将命名空间纳入每个视图(@using MyNS.Helpers
)的范围,您可以将其添加到您的<namespaces>
标记中~/Views/web.config
文件(不要与~/web.config
混淆。)