2010-10-20 22 views
14

Sto provando a creare un helper HTML dichiarativo come specificato in ScottGu's Razor post, ma non ho molta fortuna. Ho provato a mettere un file Helpers.cshtml con un DateTimeHelper in Views/Helpers ma non lo raccoglieva, quindi ho provato in App_Code come da the MVC 3 Beta post. Ora lo raccoglie, ma quando cerco di usarlo in un file in questo modo:Dove posizionare gli helper dichiarativi HTML in ASP.NET MVC 3

@DateTimeHelper (DateTime.Now)

Il compilatore si lamenta che DateTimeHelper non esiste.

Alcune cose strane: Se rinominare il file in DateTime.cshtml, ottengo un errore diverso, qualcosa sul particolare codice nel mio helper.

Per completezza, ecco il codice del aiutante:

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

L'aiuto viene utilizzato in una certa visione del genere:

@model dynamic 

<div> 
    <p> The current time is @DateTimeHelper(DateTime.Now)</p> 
</div> 

risposta

23

Per utilizzare la funzione "@helper" in Razor voi è necessario posizionare il file CSHTML nella cartella App_Code della tua app. Non c'è una cartella "Views/Helpers" in ASP.NET MVC 3. Il post del blog di ScottGu è stato scritto prima che la funzionalità fosse completamente implementata, e alcune delle note non sono più completamente accurate.

Per chiamare "@helper" che hai scritto devi includere sia il nome del file che il nome dell'helper al suo interno. Ad esempio, se si dispone di questo helper:

~/App_Code/MyHelper.cshtml

E questo contenuto:

@helper ShowStuff(string stuff) { 
    <p>@stuff</p> 
} 

Poi si chiamano in questo modo:

@MyHelper.ShowStuff("some stuff!") 
+0

Grande, quello ha funzionato perfettamente. Grazie! – Diego

+0

È ancora accurato per MVC 3 RTW? – Mike

+0

@Mike sì questo è ancora vero. Cercheremo di supportare gli helper di Razor in una versione futura. – Eilon

Problemi correlati