8

App_Codeフォルダー内の単純なRazorヘルパー:

MyHelper.cshtml

@using System.Web.Mvc

@helper SimpleHelper(string inputFor){
    <span>@inputFor</span>
    Html.RenderPartial("Partial");
}

ビュー/共有フォルダのシンプルなビュー:

MyView.cshtml

<html>
    <head

    </head>
    <body>
        @WFRazorHelper.SimpleHelper("test")
    </body>
</html>

ビュー/共有フォルダの単純な部分ビュー:

Partial.cshtml

<h1>Me is Partial</h1>

コンパイラがエラーをスローします:

CS1061:'System.Web.WebPages.Html.HtmlHelper'enthältkeineDefinitionfür'RenderPartial'、und es konnte keine Erweiterungsmethode'RenderPartial' gefunden werden、die ein erstes Argument vom Typ'System.Web.WebPages.Html.HtmlHelp (Fehlt eine Using-Direktive oder ein Assemblyverweis?)。

しかし、MyView.cshtmlでHtml.RenderPartialを呼び出すと、すべてが正常に機能します。

MyViewのHtmlHelperはSystem.Web.Mvcから取得され、MyHelper.cshtmlのHtmlHelperはSystem.Web.WebPagesから取得されるため、いくつかのweb.configsを変更する必要があると思います。

これを修正するにはどうすればよいですか?

4

1 に答える 1

16

HtmlはWebページのプロパティであるため、ビュー内でのみアクセスできます。App_Codeフォルダー内のカスタムヘルパーはそれにアクセスできません。

したがって、HtmlHelper内部で使用する必要がある場合は、asパラメーターを渡す必要があります。

@using System.Web.Mvc.Html

@helper SimpleHelper(System.Web.Mvc.HtmlHelper html, string inputFor)
{
    <span>@inputFor</span>
    html.RenderPartial("Partial");
}

次に、ビューからHtmlHelperインスタンスを渡して、カスタムヘルパーを呼び出します。

<html>
    <head>

    </head>
    <body>
        @WFRazorHelper.SimpleHelper(Html, "test")
    </body>
</html>
于 2012-09-20T10:37:16.137 に答える