如何在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路径几乎相同),但您可以看到主体在运行。。。