以前の投稿で、ヘルパーの使用を開始する方法について質問しました。成功しましたが、この手法を使用しようとすると、1。Html.RenderActionに基づいて別のヘルパーを作成します。2。独自のカスタムヘルパーを渡すと、App_Codeにエクスポートされたときにエラーが発生しました。
繰り返しになりますが、強調するために、これらはインラインで機能しますが、App_Codeにエクスポートされた場合は機能しません。
元のコードは次のとおりです。
私のコードの多くの部分には、次のものしかありません。
<section class="Box">
@{ Html.RenderAction("PageOne"); }
</section>
他の多くの部分にはこれがあります:
@if (@Model.PageTwo)
{
<section class="Box">
@{ Html.RenderAction("PageTwo"); }
</section>
}
したがって、私の最初のステップは、上記のすべてのコードブロックで使用できる次のものをインラインヘルパーに抽出することでした。
@helper Item(HtmlHelper html, string action, string htmlClass)
{
<section class="@htmlClass">
@{ html.RenderAction(action); }
</section>
}
上記のヘルパーを使用すると、上記の最初のコードセグメントのように見えるすべてのコードブロックを次の行に置き換えることができます。
@Item(Html, "PageOne", "Box")
次に、次のような2番目のヘルパーを作成しました。
@helper Item(HtmlHelper html, string action, string htmlClass, bool test)
{
if (test)
{
@Item(html, action, htmlClass)
}
}
このヘルパーを使用すると、上記の2番目のコードセグメントのように見えるすべてのコードブロックを次の行に置き換えることができます。
@Item(Html, "PageTwo", "Box", @Model.ShowThisTorF)
もう一度私の主な質問は、これはインラインで機能するので、App_Codeに削除するときにどうでしょうか。
App_Codeに移動すると、次のエラーが発生します。最初の問題は、次のコード行を追加するusing参照(HtmlHelperがあいまいなため)の追加に関するものです。
@using HtmlHelper=System.Web.Mvc.HtmlHelper
これにより最初のエラーが削除されますが、別のエラーが発生します。
System.Web.Mvc.HtmlHelperには「RenderAction」の定義が含まれておらず、「System.Web.Mvc.HtmlHelper」タイプの最初の引数を受け入れる拡張メソッド「RenderAction」が見つかりませんでした(usingディレクティブまたはアセンブリリファレンス?)
他のリファレンスも試しましたが、結果はありません。
@using HtmlHelper=System.Web.WebPages.Html.HtmlHelper
私が抱えているもう1つの問題は、最初のブロックが機能するようになると、2番目のブロックが機能しないと思うことです。インラインで正常に機能しましたが。
また、私はそれが明白であることを知っています、しかし私がここでそれを言わなければ、誰かが彼らの答えでそれを尋ねるでしょう。それをファイルApp_Codeに移動したとき、実際に必要に応じてファイル名のプレフィックスを追加したので、コードの1行の塊は次のようになりました。
@Helpers.Item(Html, "PageOne", "Box")
@Helpers.Item(Html, "PageTwo", "Box", @Model.ShowThisTorF)
これについて助けてくれてありがとう。