我试图在
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!")