14

ScottGuのRazorの投稿で指定されているように、宣言型のHTMLヘルパーを作成しようとしていますが、あまり運がありません。DateTimeHelperを含むHelpers.cshtmlファイルをViews/Helpersに配置しようとしましたが、それが取得されないため、MVC3Betaの投稿に従ってApp_Codeで試行しまし。今ではそれを取得しますが、次のようなファイルで使用しようとすると、次のようになります。

@DateTimeHelper(DateTime.Now)

コンパイラは、DateTimeHelperが存在しないと文句を言います。

奇妙なことに、ファイルの名前をDateTime.cshtmlに変更すると、ヘルパーの特定のコードに関するエラーなど、別のエラーが発生します。

完全を期すために、ヘルパーのコードは次のとおりです。

@helper DateTimeHelper(DateTime t, bool longDate = true, bool showTime = true, bool longTime = true) {
    <time datetime='@t.ToUniversalTime()'>
        @if(longDate) {
            if(showTime) {
                if(longTime) {
                    @t.ToLongDateString() @t.ToLongTimeString();
                } else {
                    @t.ToLongDateString() @t.ToShortTimeString();
                }
            } else {
                @t.ToLongDateString()
            }
        } else {
            if(showTime) {
                if(longTime) {
                    @t.ToShortDateString() @t.ToLongTimeString();
                } else {
                    @t.ToShortDateString() @t.ToShortTimeString();
                }
            } else {
                @t.ToShortDateString()
            }
        }
    </time>
}

ヘルパーは、次のような特定のビューで使用されます。

@model dynamic

<div>
    <p> The current time is @DateTimeHelper(DateTime.Now)</p>
</div>
4

1 に答える 1

22

Razor で "@helper" 機能を使用するには、CSHTML ファイルをアプリの App_Code フォルダーに配置する必要があります。ASP.NET MVC 3 には "Views/Helpers" フォルダーはありません。ScottGu のブログ投稿は、機能が完全に実装される前に書かれたものであり、そこにあるメモの一部は完全に正確ではありません。

作成した「@helper」を呼び出すには、ファイル名とヘルパーの名前の両方を含める必要があります。たとえば、次のヘルパーがあるとします。

~/App_Code/MyHelper.cshtml

そして、このコンテンツ:

@helper ShowStuff(string stuff) {
    <p>@stuff</p>
}

次に、次のように呼び出します。

@MyHelper.ShowStuff("some stuff!")
于 2010-10-20T21:05:37.243 に答える