2012-06-15 39 views
3

我想創建一個擴展方法。但我得到:ASP.Net MVC3:UrlHelper擴展方法需要參數

無過載的方法MRUrl取0參數

HtmlHelper.cs:

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

查看:

@MyNS.Helpers.MyHelper.MRUrl() 

回答

14

你是不是調用擴展方法正確。它應該是:

@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或剃刀。

現在一些ASP.NET MVC特定的:如果你想避免帶來的命名空間到範圍爲每個視圖(@using MyNS.Helpers),你可以把它添加到您的~/Views/web.config文件的<namespaces>標籤的需要(不要混淆與~/web.config)。

+0

出色答卷。像你這樣的人讓這個世界四處奔走:) – Doomsknight

+1

@Darin,你是一位搖滾明星。感謝您的大力支持! –