剃刀 – 我应该在ASP.NET MVC 3中放置声明式HTML助手

我试图在 ScottGu’s Razor post中指定一个声明性的HTML帮助器,但我没有太多的运气.我试图在Views / Helpers中放置一个带有DateTimeHelper的Helpers.cshtml文件,但是它不会被接受,所以我在AppCode中尝试使用 the MVC 3 Beta post.现在它选择它,但是当我尝试在一个文件中使用它所以:

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

解决方法

要在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!")

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...