asp.net mvc 3-MVC3:如何在HtmlHelper扩展中以程序方式获取当前正在执行的视图或部分视图



如何在HtmlHelper扩展中以编程方式获取当前正在执行的视图名称或部分视图名称?在我的情况下,我不能使用ViewData,或者不能将视图名称从view传递给扩展。

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

这是您的最佳选择:

在ASP中检索当前视图名称。NET MVC?

即使对于局部视图,也有一种找到真实路径的肮脏方法,但它确实是。。肮脏的

助手。ViewDataContainer的类型类似于"ASP_Page_Areas_Users_Views_Customers_PersonContactsModel_cs.html"。所以您可以解析它并获取路径。

另一种方式有点难看:基本的剃刀视图类包含属性VirtualPath,该属性包含视图的路径。您可以将其传递给助手

根据Vasily的说法,我想出了这个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);
    }

我的目的是创建一个助手,允许您使用Cassette引用PartialView特定的Bundle(其路径与PartialView路径几乎相同),但您可以看到主体在运行。。。

相关内容

  • 没有找到相关文章

最新更新