2010-10-20 76 views
14

我試圖做一個聲明性的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> 

回答

23

要使用‘@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