4

拡張メソッドを作成しようとしています。しかし、私は得る:

メソッドのオーバーロードなしMRUrl0 引数を取る

HtmlHelper.cs:

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

意見:

@MyNS.Helpers.MyHelper.MRUrl()
4

1 に答える 1

15

拡張メソッドを正しく呼び出していません。そのはず:

@Url.MRUrl()

拡張メソッドを使用する前に、C# での拡張メソッドのしくみについてお読みください: http://msdn.microsoft.com/en-us/library/bb383977.aspx

拡張メソッドは、指定された型 (あなたの場合) を拡張し、この型のインスタンスUrlHelperで呼び出されます。したがって、ビュー内には既に(プロパティ全体で) のインスタンスがあるため、拡張メソッドを直接呼び出すことができます。UrlHelperUrl

拡張メソッドを呼び出す前に、それを含むクラスが定義されている名前空間を追加して、それをスコープに入れる必要があります。

@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

于 2012-06-15T11:28:44.623 に答える