Где я должен разместить декларативные помощники HTML в ASP.NET MVC 3 - PullRequest
14 голосов
/ 20 октября 2010

Я пытаюсь создать декларативный HTML-помощник, как указано в Пост бритвы ScottGu , но мне не очень повезло.Я попытался поместить файл Helpers.cshtml с DateTimeHelper в Views / Helpers, но он не поднял его, поэтому я попытался в App_Code согласно посту MVC 3 Beta .Теперь он подхватывает его, но когда я пытаюсь использовать его в файле, например, так:

@ 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>

1 Ответ

22 голосов
/ 21 октября 2010

Чтобы использовать функцию @helper в Razor, вам нужно поместить файл CSHTML в папку App_Code вашего приложения. В ASP.NET MVC нет папки «Views / Helpers» 3. Блог ScottGu был написан до того, как эта функция была полностью реализована, и некоторые примечания там уже не совсем точные.

Чтобы вызвать «@helper», который вы написали, вы должны включить в него как имя файла, так и имя помощника. Например, если у вас есть этот помощник:

~ / App_Code / MyHelper.cshtml

А это содержание:

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

Тогда вы называете это так:

@MyHelper.ShowStuff("some stuff!")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...