检查HtmlHelperMethod中是否存在(部分)视图

时间:2013-04-25 10:08:31

标签: c# asp.net-mvc

是否有人知道是否可以检查HtmlHelperExtension中是否存在部分视图?

我知道可以从控制器使用以下内容:

 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?

但是您无法在帮助程序中执行上述操作,因为您无权访问控制器上下文。有关如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:32)

  

但你无法在帮助器中执行上述操作,因为您无权访问控制器上下文。

哦,是的,你确实有权访问:

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

答案 1 :(得分:10)

为了完整起见,查找局部视图的方法实际如下。

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

并确保包含视图的扩展名;用于razor的cshtml或用于webforms视图引擎的aspx。

答案 2 :(得分:0)

如果您使用的是Asp.Net Core(Mvc),则可以像这样检查HtmlHelper扩展中是否存在“视图”:

"k8s.io/cluster-autoscaler/${var.cluster-name}" = "true"