2010-06-24 12 views
9

Tengo un problema similar al que se describe aquí: MVC T4 MvcTextTemplateHost and Customized "Controller" T4 Template pero es de esperar, más simple.Obtener el nombre del controlador en la plantilla Ver T4

que tienen una vista personalizada de las plantillas (View.tt, Create.tt) para el proyecto de ASP.NET MVC. No puedo entender cómo obtener el nombre del controlador en estas plantillas de vista. mvcHost.ControllerName y mvcHost.ControllerRootName ambos son nulos en las plantillas de visualización. Sin embargo, en algún lugar del nombre de controlador de entubado es conocido, ya que se crea la vista int la carpeta ControllerName. Quiero referirme a él en la plantilla misma.

concreto, quiero generar HTML.ActionLink("Edit", MVC.<controllername>.Edit(id)) en lugar de HTML.ActionLink("Edit", "Edit", new {id = item.id})

¿Es posible obtener el nombre del controlador en la plantilla de vista?

+0

EDIT: Eliminar la etiqueta t4mvc como irrelevante para la pregunta – Felix

+0

¿Cómo terminaste haciéndolo? También me gustaría generar vistas que usen T4MVC, así que necesito el nombre del controlador. –

+0

simplemente ponga un marcador de posición/* ponga el controlador aquí * /. Después de todo, lo estoy haciendo por mí mismo (aunque varios miembros del equipo "me lo prestaron" :) ¡así que nadie se queja! – Felix

Respuesta

2

No creo que haya una manera de obtener esa información en MVC 1.0 o MVC 2. Las propiedades ControllerRootName y ControllerName del host son para plantillas de controlador T4 y no para ver plantillas T4.

Voy a ver si podemos añadir más información al host T4 para permitir que estas propiedades al generar puntos de vista.

La razón de que el archivo generado se muestra en la carpeta correcta es que el sistema del proyecto MVC toma la salida de la plantilla de T4 y pone allí. El sistema T4 en sí mismo no participa en este proceso.

+1

Sí, nos gustaría que habilite estas propiedades. –

+1

Eilon, alguna idea si esto se ha agregado a partir de MVC 5 (octubre de 2014)? Quiero añadir una clase personalizada en 'Html.BeginForm', pero por lo que yo puedo decir que necesito saber el nombre del controlador con el fin de especificar htmlAttributes. – Sam

4

Desde que, por convención, casi siempre uso el mismo nombre para mi controlador como lo he llamado el Modelo, utilizo este código en mi plantilla para obtener el nombre del modelo y por lo tanto el nombre del controlador:

@Html.ActionLink("Create new", 
    MVC.<#= mvcHost.ViewDataTypeName.Split('.').Last() #>.Create()) 
+0

Gracias por la idea. Supongo que * si * tenía una relación uno-a-uno entre mis controladores y modelos que sería una buena idea. Dado que nunca he visto un diseño así en ningún otro lado que no sea en los tutoriales más triviales, tendré que esperar a una solución más fundamental ... – Felix

Cuestiones relacionadas