2010-06-24 5 views
9

J'ai un problème similaire à celui décrit ici: MVC T4 MvcTextTemplateHost and Customized "Controller" T4 Template mais je l'espère, plus simple.Obtenir le nom du contrôleur dans le modèle View T4

J'ai des modèles de vue personnalisés (View.tt, Create.tt) pour le projet ASP.NET MVC. Je ne peux pas comprendre comment obtenir le nom du contrôleur dans ces modèles de vue. mvcHost.ControllerName et mvcHost.ControllerRootName sont tous les deux null dans les modèles View. Toutefois, quelque part dans le nom de contrôleur de pipeline est connu, puisque la vue est créée dans le dossier ControllerName. Je veux y faire référence dans le modèle lui-même.

Plus précisément, je veux générer HTML.ActionLink("Edit", MVC.<controllername>.Edit(id)) au lieu de HTML.ActionLink("Edit", "Edit", new {id = item.id})

Est-il possible d'obtenir le nom du contrôleur dans le modèle de View?

+0

EDIT: Supprimer tag t4mvc comme non pertinent à la question – Felix

+0

Comment avez-vous fini par faire? Je voudrais également générer des vues qui utilisent T4MVC donc j'ai besoin du nom du contrôleur. –

+0

juste mettre un espace réservé/* mettre le contrôleur ici * /. Après tout, je le fais pour moi-même (même si plusieurs membres de l'équipe m'ont "emprunté" :) - donc personne ne se plaint! – Felix

Répondre

2

Je ne pense pas qu'il existe un moyen d'obtenir cette information dans MVC 1.0 ou MVC 2. Les propriétés ControllerRootName et ControllerName de l'hôte sont pour les modèles T4 du contrôleur et pas pour les modèles T4 vue.

Je vais voir si nous pouvons ajouter plus d'informations à l'hôte T4 pour activer ces propriétés lors de la génération de vues.

La raison pour laquelle le fichier généré apparaît dans le bon dossier est que le système de projet MVC prend la sortie du modèle T4 et l'y place. Le système T4 lui-même ne participe pas à ce processus.

+1

Oui, nous aimerions que vous activiez ces propriétés! –

+1

Eilon, aucune idée si cela a été ajouté à partir de MVC 5 (Oct 2014)? Je veux ajouter une classe personnalisée sur 'Html.BeginForm', mais pour autant que je sache, j'ai besoin de connaître le nom du contrôleur afin de spécifier htmlAttributes. – Sam

4

Depuis que je, par convention, presque toujours utiliser le même nom pour mon contrôleur comme je l'ai nommé le modèle, j'utiliser ce code dans mon modèle pour obtenir le nom du modèle et celui-ci le nom du contrôleur:

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

Merci pour cette idée. Je suppose, * si * j'avais une relation un-à-un entre mes contrôleurs et les modèles qui serait une bonne idée. Étant donné que je n'ai jamais vu un tel design nulle part, mais dans les tutoriels les plus triviaux - je vais devoir attendre une solution plus fondamentale ... – Felix

Questions connexes