4

私はこれを理解するために2時間の大部分を費やしてきました。ここに行きます:

HTMLHelper拡張メソッドを作成したいだけです。これは以前にも何度も行われており、正しくコーディングしていることはわかっています。ただし、Razorは、コードファイルをApp_Code(MVCの世界ではもはや意味がないと思っていたフォルダー)内に配置した場合にのみ、それを認識しているようです。

どうすればこれを知ることができますか?

非常に簡単です...2つの同じ名前のファイルに2つの同じコードのHTMLHelper拡張メソッドがあります。

〜/ Extensions内に配置された最初のファイルには、拡張子メソッドが含まれていますDisplayForProperty

〜/ App_Code内に配置された2番目のファイルには、拡張メソッドが含まれていますDisplayForProperty2

ビューで入力すると、次のように入力します@Html.Displ-Intellisenseは表示するだけですDisplayForProperty2

@usingを見るのに必要ではないように思われるので、私は声明を持っていませんDisplayForProperty2。言うまでもなく、この場合は何も変更されません。

それで、これはなぜですか?これはこのように起こっているべきですか?これは単にかみそりが遅れているのですか、それとも私が遅れているのですか?

VS2012の完全に更新されたコピーを使用しています。

PS-別の注意点として、名前空間参照をすべてのweb.configのすべての/ Viewsディレクトリ(すべての単一のAreaのように)とルートに配置する必要がありますか?これをルートまたはルート/Viewsディレクトリに配置できないのはなぜですか?

4

4 に答える 4

2

App_Code 内に html ヘルパー拡張メソッドを配置する必要はありません。少し古いですが、asp.net のチュートリアル: http://www.asp.net/mvc/tutorials/older-versions/views/creating-custom-html-helpers-csはかなりうまくガイドします。

通常、MVC プロジェクトのルートの下に「Helpers」フォルダーがあり、それぞれに個別のクラス ファイルがあります。それらは名前空間にあり、ヘルパーを使用したい Razor ビューにProject.MVC.Helpersa を追加します。@using Project.MVC.Helpers

于 2013-02-01T05:04:03.707 に答える
0

ビュー フォルダー内の Web.config ファイルに、ヘルパーを含む名前空間を追加する必要がある場合があります。

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="Namespace.Of.Your.Helper" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

これにより、名前空間を参照する @using なしでビューがヘルパーを使用できるようになります。

于 2013-02-12T05:24:44.240 に答える
0

App_Code 以外のフォルダに置いたときに HtmlHelper クラスに生成された名前空間は確認しましたか?

おそらく、見逃しているのは、ビュー内のその名前空間を指す @using ディレクティブだけです。

于 2013-02-12T05:18:03.577 に答える
0

app_code フォルダーは、プロジェクトによって自動的にコンパイルおよび参照される特別なフォルダーです。

于 2013-02-01T19:35:03.340 に答える