8
votes

MVC3: Comment obtenir actuellement l'exécution d'une vue ou d'une vue partielle de manière programmée dans une extension HTMLHelper?

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.


0 commentaires

4 Réponses :


2
votes

1 commentaires

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.



2
votes

Il y a une solution sale pour trouver un chemin réel, même pour une vue partielle, mais c'est vraiment .. sale.

Helper.ViewDatacontainer est de type comme "ASP._PAGE_AREAS_USERS_VIEWS_CUSTOMERS_PERSONCONTACTSMODEL_CSHTML". Donc, vous pouvez l'analyser et obtenir un chemin.

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


0 commentaires

8
votes
var webPage = htmlhelper.ViewDataContainer as WebPageBase;
var virtualPath = webPage.VirtualPath;

0 commentaires

0
votes

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);
    }


0 commentaires