我应该在ASP.NET MVC 3中放置声明性HTML帮助器

时间:2010-10-20 18:42:18

标签: razor asp.net-mvc-3

我正在尝试制作ScottGu's Razor post中指定的声明性HTML帮助程序,但我没有太多运气。我尝试在Views / Helpers中添加一个带有DateTimeHelper的Helpers.cshtml文件,但是它不会提取它,所以我按照the MVC 3 Beta post尝试了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>

1 个答案:

答案 0 :(得分: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!")