2011-02-01 13 views
8

He estado usando T4MVC desde hace un tiempo y me encanta la característica "HtmlHelpers explícitos para renderizar parciales", que está apagada por defecto. Estoy usando la versión 2.6.40 de T4MVC.¿Cuándo admitirá T4MVC Razor con HtmlHelpers explícitos para renderizar parciales?

Recientemente me actualicé a MVC3 y noté que no se generan HtmlHelpers explícitos para los parciales de Razor, así que miré el código fuente de la plantilla de texto T4MVC y encontré un método llamado "GetPartials" que tiene una línea de código como siguientes:

var parts = GetControllers() 
     .Select(m => m.ViewsFolder) 
     .SelectMany(m => m.Views) 
     .Where(m => m.Value.EndsWith(".ascx")); 

Por lo tanto, está claro que las vistas Razor no son compatibles.

También me gustaría mencionar que cuando ejecuto la plantilla T4 (clic con el botón derecho> ejecutar la herramienta personalizada) aparece una advertencia del compilador que dice: "Los compiladores C# 2.0 y C# 3.5 ya no son compatibles. compilado con el compilador de la versión 4 en lugar de 'v3.5' como se especifica.

Esto se relaciona con la línea 18, donde el atributo de idioma de la plantilla tiene un valor de "C# v3.5". ¿Por qué tiene que tener una dependencia de versión explícita? ¿No puede ser simplemente "C#"?

Disculpa por hacer dos preguntas separadas en una publicación.

Respuesta

11

Acabo de lanzar T4MVC 2.6.42 para solucionar esto. Puedes obtenerlo de Codeplex o de NuGet.

Tenga en cuenta que para que T4MVC detecte un archivo de rasuradora como parcial, su nombre debe comenzar con un guión bajo (por ejemplo, _foo.cshtml). Sin esta restricción, terminaríamos creando métodos de ayuda para todas las vistas, lo que contaminaría las cosas y no agregaría valor. Tenga en cuenta que el equipo de MVC generalmente recomienda el prefijo de vistas Razor parciales con _.

En cuanto a la advertencia, no está relacionada y es benigna. Para deshacerse de él, simplemente cambie el idioma = "C# v3.5" al idioma = "C#". No puedo hacer ese cambio en la versión oficial ya que eso lo rompería cuando se ejecute en 3.5 (y no quiero mantener dos versiones separadas solo para eso).

+1

¡Gracias, David! – Shayne

2

La advertencia del compilador que recibe es solo eso, una advertencia. No está impidiendo que T4MVC funcione.

En cuanto a la compatibilidad con Razor, ha encontrado el código apropiado en la plantilla; simplemente modifíquelo.

var parts = GetControllers() 
     .Select(m => m.ViewsFolder) 
     .SelectMany(m => m.Views) 
     .Where(m => m.Value.EndsWith(".ascx") || m.Value.EndsWith(".cshtml") || m.Value.EndsWith(".vbhtml")); 

Me gustaría probarlo.

Es solo una Plantilla T4, no mágica. Todo lo que contiene es código C# simple que obtiene información del proyecto del entorno de Visual Studio y genera un código C# bastante simple.

+2

Gracias. Sé que las plantillas T4 no son mágicas. Definitivamente podría haber hecho el cambio yo mismo. Simplemente no quería perder el tiempo haciendo un cambio que simplemente se sobrescribirá la próxima vez que actualice T4MVC. Quería llamar la atención de David para que pudiera liberar una solución para que todos pudieran beneficiarse. De hecho, he encontrado otro error en T4MVC desde este momento y sé qué hacer para solucionarlo, pero quiero ser colaborador del proyecto, por lo que acabo de solicitar ser colaborador. Espero ser aceptado. – Shayne

Cuestiones relacionadas