Doo*_*ght 4 c# asp.net asp.net-mvc-3
我正在尝试创建一个扩展方法.但我得到:
没有重载方法
MRUrl需要0个参数
HtmlHelper.cs:
namespace MyNS.Helpers
{
public class MyHelper
{
public static string MRUrl(this UrlHelper url)
{
return "blah"
}
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
@MyNS.Helpers.MyHelper.MRUrl()
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 15
您没有正确调用扩展方法.它应该是:
@Url.MRUrl()
Run Code Online (Sandbox Code Playgroud)
在使用之前,请阅读有关扩展方法在C#中如何工作的信息:http://msdn.microsoft.com/en-us/library/bb383977.aspx
扩展方法扩展给定类型(UrlHelper在您的情况下)并在此类型的实例上调用.因此,在您的视图中,您已经拥有UrlHelper(在整个Url属性中)的实例,因此您可以直接在其上调用您的扩展方法.
在能够调用扩展方法之前,您需要通过添加定义其包含类的命名空间来将其纳入范围:
@using MyNS.Helpers
@Url.MRUrl()
Run Code Online (Sandbox Code Playgroud)
还必须在静态类中声明扩展方法.您的C#代码甚至不会编译.所以解决它:
namespace MyNS.Helpers
{
public static class HtmlHelper // Bad name choice I know.
{
public static string MRUrl(this UrlHelper url)
{
return "blah";
}
}
}
Run Code Online (Sandbox Code Playgroud)
所有这些都是标准的C#,与ASP.NET MVC或Razor无关.
现在ASP.NET MVC特有的东西:如果你想避免必须将命名空间纳入每个视图的范围(@using MyNS.Helpers),你可以将它添加到<namespaces>你的~/Views/web.config文件的标记(不要与它混淆~/web.config).