2010-10-20 11 views
14

J'essaie de créer une aide HTML déclarative comme spécifié dans ScottGu's Razor post, mais je n'ai pas beaucoup de chance. J'ai essayé de placer un fichier Helpers.cshtml avec un DateTimeHelper dans Views/Helpers mais il ne le ramasserait pas, donc j'ai essayé dans App_Code selon the MVC 3 Beta post. Maintenant, il le prend, mais lorsque je tente de l'utiliser dans un fichier comme ceci:Où dois-je placer des aides HTML déclaratives dans ASP.NET MVC 3

@DateTimeHelper (DateTime.Now)

Le compilateur se plaint que DateTimeHelper n'existe pas.

Certaines choses étranges: Si je renommer le fichier en DateTime.cshtml, j'obtiens une erreur différente, quelque chose à propos du code particulier dans mon assistant.

Par souci d'exhaustivité, voici le code de l'aide:

@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'aide est utilisé dans un certain point de vue comme celui-ci:

@model dynamic 

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

Répondre

23

Pour utiliser la fonction "@helper" dans Razor vous besoin de placer le fichier CSHTML dans le dossier App_Code de votre application. Il n'y a pas de dossier "Views/Helpers" dans ASP.NET MVC 3. Le billet de blog de ScottGu a été écrit avant que la fonctionnalité ne soit entièrement implémentée, et certaines notes ne sont plus tout à fait exactes.

Pour appeler le "@helper" que vous avez écrit, vous devez inclure le nom de fichier ainsi que le nom de l'assistant à l'intérieur. Par exemple, si vous avez cette aide:

~/App_Code/MyHelper.cshtml

Et ce contenu:

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

Ensuite, vous l'appelez comme ceci:

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

Grand, Cela a fonctionné parfaitement. Merci! – Diego

+0

Est-ce encore exact pour MVC 3 RTW? – Mike

+0

@Mike oui c'est toujours vrai. Nous chercherons à soutenir les assistants Razor dans une future version. – Eilon