有没有办法在尝试渲染之前检查 ViewComponent 的 View 是否真的存在?
我知道有FindView和GetView方法可以从控制器中搜索视图,我正在为 ViewComponents 寻找类似的东西。
在ViewComponent内部,有一个ViewEngine,但是当我尝试使用它时...
ViewEngine.FindView(ViewContext, "SomeView", false);
... 结果的 SearchedLocations 不是在寻找 ViewComponents:
[0]: "/Views/Home/SomeView.en-US.cshtml"
[1]: "/Views/Home/SomeView.en.cshtml"
[2]: "/Views/Home/SomeView.cshtml"
[3]: "/Views/Shared/SomeView.en-US.cshtml"
[4]: "/Views/Shared/SomeView.en.cshtml"
[5]: "/Views/Shared/SomeView.cshtml"
[6]: "/Pages/Shared/SomeView.en-US.cshtml"
[7]: "/Pages/Shared/SomeView.en.cshtml"
[8]: "/Pages/Shared/SomeView.cshtml"
注意:问这个问题是因为 try-catch 块没有捕捉到缺少视图时发生的异常,例如...
public IViewComponentResult Invoke()
{
try
{
return View();
}
catch (Exception e)
{
return Content(string.Empty);
}
}
... 由于缺少视图文件,会导致未处理的异常。