我应该在哪里应该声明HTML帮助器在ASP.NET MVC 3

问题描述:

我试图做一个声明性的HTML帮助ScottGu's Razor post指定,但我没有太多的运气。我试图在Views/Helpers中添加一个带有DateTimeHelper的Helpers.cshtml文件,但它不会提取它,所以我尝试在App_Code中按照the MVC 3 Beta post。现在,它把它捡起,但是当我尝试使用它在一个文件中,像这样:我应该在哪里应该声明HTML帮助器在ASP.NET 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> 

要使用‘@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!") 
+0

大,那完美的工作。谢谢! – Diego 2010-10-21 00:29:46

+0

这对于MVC 3 RTW仍然准确吗? – Mike 2011-01-26 20:10:03

+0

@Mike是的,这仍然是真的。我们将在未来版本中寻求支持剃刀助手。 – Eilon 2011-02-01 21:33:10