sintaxis pages mvc español else cshtml code c# model-view-controller razorgenerator

c# - pages - RazorGenerator no puede ver el ayudante de cshtml personalizado



razor pages español (5)

Solución:

App_Code poner este comentario al principio de un helper que tenga en App_Code :

@* Generator: MvcHelper GeneratePrettyNames : true *@

Luego, en web.config donde tiene configuración para las páginas de afeitar, debe agregar el espacio de nombres que RazorGenerator generó para esos ayudantes:

<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="YourWebAppNamespace.App_Code" /> </namespaces> </pages> </system.web.webPages.razor>

Cambie YourWebAppNamespace a su espacio de nombres de proyecto predeterminado (probablemente sea el nombre de su proyecto):

Explicación:

RazorGenerator trató a sus ayudantes como a la vista de una navaja de afeitar normal, por lo que el código generado tenía este aspecto:

[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")] [System.Web.WebPages.PageVirtualPathAttribute("~/App_Code/TestHelper.cshtml")] public partial class _App_Code_TestHelper_cshtml : Komplett.Chrome.Web.Features.Shared.BaseView<dynamic> { #line 3 "../../App_Code/TestHelper.cshtml" public System.Web.WebPages.HelperResult HelperName(string name) {

Debe agregar estos comentarios de directivas para decirle al generador de maquinillas de afeitar que cree una clase con el nombre "normal" (al igual que el nombre del archivo de ayuda, haga esto con la directiva GeneratePrettyNames ) y con una función pública estática para que pueda usarse en otras vistas (hecho por Generator: MvcHelper directiva Generator: MvcHelper ). Con esos comentarios de directivas, RazorGenerator genera un archivo de C # como este:

[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")] public class TestHelper : System.Web.WebPages.HelperPage { #line 6 "../../App_Code/TestHelper.cshtml" public static System.Web.WebPages.HelperResult HelperName(string name) {

Ahora solo necesita agregar espacio de nombres a web.config para que el código generado por C # para otras vistas tenga que usar una declaración con el espacio de nombres de este ayudante generado.

Tengo un problema con RazorGenerator: no puedo compilar vistas que usan mi ayudante personalizado:

App_Code / ViewHelper.cshtml

@helper test(System.Web.Mvc.HtmlHelper html) { <h4>Test</h4> }

Vistas / Test.cshtml

(...) @ViewHelper.test(this.Html) (...)

Cuando intento compilar mi proyecto, obtengo este error para Test.cshtml:

El nombre ''ViewHelpers'' no existe en el contexto actual

Intenté agregar varios espacios de nombres a mi archivo Views / web.config:

<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> <add namespace="System.Web.Optimization" /> <add namespace="MyProject" /> <add namespace="Kendo.Mvc.UI" /> <add namespace="MvcSiteMapProvider.Web.Html" /> <add namespace="MvcSiteMapProvider.Web.Html.Models" /> </namespaces> </pages> </system.web.webPages.razor>

pero sin éxito ...

¿Me estoy perdiendo algún espacio de nombres que debería incluirse en este archivo? Si no, ¿hay alguna otra manera de hacer que RazorGenerator compile la vista? Además, ¿existen los ayudantes cshtml en un espacio de nombres?


Estoy usando RazorGenerator.MsBuild para compilar mis vistas y RazorGenerator.Mvc para cargarlas. La App_Code más fácil para mi App_Code de aplicación fue agregar lo siguiente a la parte superior de mis archivos de ayuda

@* Generator: MvcHelper GeneratePrettyNames: true Namespace: My.Projects.Namespace *@

Con esto no hay cambios en web.config o cualquier otra cosa que haya que hacer.


Mire el archivo cs real generado en la carpeta obj / CodeGen para los ayudantes. Podría ser el problema de nombre de clase, así que agregue esto a la parte superior del archivo cshtml de su ayudante:

@* GeneratePrettyNames : true *@


Resulta que necesitaba compilar al ayudante para que funcionara.

Sin embargo, eso no me llevó demasiado lejos: RazorGenerator no pudo "ver" las referencias de espacio de nombres Mvc. He leído que RG no es compatible con MVC versión 5.0 o superior (¿o no?).


Tuve el mismo problema con RazorGenerator cuando actualicé a MVC 5.

De acuerdo con esta discusión en el codeplex de RazorGenerator , parece que el paquete RazorGenerator.MsBuild a veces tiene un problema para resolver la versión correcta de Razor para usar, por lo que termina perdiendo los espacios de nombres definidos en web.config.

Para forzarlo a usar la versión correcta de Razor (y con suerte recoger sus espacios de nombres), cree un archivo llamado razorgenerator.directives en la carpeta del proyecto que contiene el texto: RazorVersion: 3