2013-04-25 55 views
23

有誰知道是否可以通過HtmlHelperExtension檢查部分視圖是否存在?檢查HtmlHelperMethod是否存在(部分)視圖

我知道這是可能使用控制器執行以下操作:

private bool ViewExists(string name) 
{ 
    ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, name, null); 
    return (result.View != null); 
} 

來源:Does a View Exist in Asp.Net MVC?

但你不能做到以上的幫手,因爲你沒有訪問控制器環境。有關如何做到這一點的任何想法?

回答

28

但是你不能在幫助程序中執行上述操作,因爲您無權訪問控制器上下文。

哦,是的,你必須訪問:

public static HtmlString MyHelper(this HtmlHelper html) 
{ 
    var controllerContext = html.ViewContext.Controller.ControllerContext; 
    var result = ViewEngines.Engines.FindView(controllerContext, name, null); 
    ... 
} 
+0

當你的partialview位於共享文件夾中的另一個自定義子文件夾內時,該怎麼辦!它不會找到它然後:( – Ciwan 2015-07-14 09:27:24

9

爲了完整起見,找一個局部視圖的方式,實際上是如下。

public static HtmlString MyHelper(this HtmlHelper html) 
{ 
    var controllerContext = html.ViewContext.Controller.ControllerContext; 
    ViewEngineResult result = ViewEngines.Engines.FindPartialView(controllerContext, name); 
    ... 
} 

並且一定要包含視圖的擴展;用於剃鬚刀的cshtml或用於webforms視圖引擎的aspx。

+0

當您的部分視圖位於共享文件夾內的自定義子文件夾內時,這也不會工作 – Ciwan 2015-07-14 09:29:43

+0

@Ciwan您需要爲子文件夾添加路徑,如:ViewEngines.Engines.FindPartialView( controllerContext,「subfolderpath /」+ name); – 2016-05-24 14:40:23