Где я должен размещать декларативные HTML-помощники в ASP.NET MVC 3
Я пытаюсь сделать декларативный HTML-помощник, как указано в сообщение ScottGu Razor, но мне не очень повезло. Я попытался поместить файл Helpers.cshtml с помощью DateTimeHelper в Views/Helpers, но он не подберет его, поэтому я попробовал в App_Code по бета-версию MVC 3 размещать. Теперь он подбирает его, но когда я пытаюсь использовать его в файле, например:
@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
Чтобы использовать функцию "@helper" в Razor, вам нужно поместить файл CSHTML в папку App_Code вашего приложения. В ASP.NET MVC нет папки "Views/Helpers". В блоге ScottGu было написано до того, как функция была полностью реализована, и некоторые из примечаний там не совсем точны.
Чтобы вызвать "@helper", который вы написали, вы должны указать как имя файла, так и имя помощника внутри него. Например, если у вас есть этот помощник:
~/App_Code/MyHelper.cshtml
И этот контент:
@helper ShowStuff(string stuff) {
<p>@stuff</p>
}
Затем вы вызываете его так:
@MyHelper.ShowStuff("some stuff!")