Comment obtenir actuellement le nom de la vue ou le nom de la vue partielle de manière programmatique à l'intérieur d'une extension HTMLhelper? Dans ma situation, je ne peux pas utiliser ViewData ou ne peut pas passer le nom de la vue à l'extension de la vue. P>
4 Réponses :
Ceci est votre meilleur pari: p>
THX, basé sur la référence que j'ai essayée ((rasorview) _helper.viewcontext.view) .Pueillir depuis que j'utilise MVC3 avec Razor View. Lorsqu'une vue partielle est appelée à partir de la vue principale, je veux un nom de la vue partielle, mais la ligne ci-dessus me donne le nom de la vue principale, ne sais pas s'il s'agit d'un bug de MVC3. Toute aide à ce sujet est appréciée.
Il y a une solution sale pour trouver un chemin réel, même pour une vue partielle, mais c'est vraiment .. sale. P>
Helper.ViewDatacontainer est de type comme "ASP._PAGE_AREAS_USERS_VIEWS_CUSTOMERS_PERSONCONTACTSMODEL_CSHTML". Donc, vous pouvez l'analyser et obtenir un chemin. P>
Une autre manière est un peu laide: la classe de visualisation de rasoir de base contient la propriété VirtualPath qui contient le chemin de la vue. Vous pouvez le transmettre à Helper P>
var webPage = htmlhelper.ViewDataContainer as WebPageBase; var virtualPath = webPage.VirtualPath;
Basé sur ce que Vasily a dit que je suis venu avec ce HTMLhelper:
public static void ReferencePartialViewBundle(this HtmlHelper helper) { // Will be something like this: "_Page_Areas_GPFund_Views_Entry__EntryVentureValuationEdit_cshtml" var viewDataContainerName = helper.ViewDataContainer.GetType().Name; //Determine bundle name var bundleName = viewDataContainerName .Replace("__", "_¬") //Preserve Partial "_" prefixes #1: Convert partial prefix "_" to "¬" temporarily .Replace("_cshtml", ".js") //We want a js file not a cshtml .Replace("_", "/") .Replace("¬", "_") //Preserve Partial "_" prefixes #2: Convert partial prefix "¬" back to "_" .Replace("/Page/", "~/Scripts/"); //All our js files live in ~/Scripts/ and then a duplicate of the file structure for views //Reference bundle Bundles.Reference(bundleName); }