有时控制器需要检查一个视图是否存在,以便它可以采取一些行动,如果它没有?
对于早期版本的asp.net mvc,我已经看过类似的问题Does a View Exist in Asp.Net MVC?,但这些方法对ASP.NET Core不起作用。我无法从控制器内部找到有关如何使用ASP.NET Core的任何文档。
鉴于以下内容:
string viewLoc= "~/views/some-folder/some-file.cshtml";
控制器如何确定视图是否存在?
答案 0 :(得分:6)
这是我在 Asp.Net Core 1.0中解决此问题的方法。使用ICompositeViewEngine。以下是一个例子。
private readonly ICompositeViewEngine _compositeViewEngine;
public YourController(ICompositeViewEngine compositeViewEngine)
{
_compositeViewEngine = compositeViewEngine;
}
然后在你的行动中:
[Route("/location/{name}")]
public IActionResult Location(string name)
{
var viewName = $"~/Views/Location/{name}.cshtml";
var result = _compositeViewEngine.GetView("", viewName, false);
if (result.Success) return View(viewName);
// or do whatever you want
return NotFound();
}
答案 1 :(得分:2)
在我看来,当运行时查看不存在时,这是一个糟糕的设计 - 但可能我不理解这个案例。
然而回答你的问题: 我不知道任何特定的方法来执行此操作,但是...查看是一个文件,因此您只需检查磁盘上是否存在文件?
例如:
System.IO.File.Exists(@"Views\Home\Index.cshtml");
System.IO.File.Exists(@".\Views\Home\Index.cshtml");
在这种情况下不要使用~
,只需使用Views\
或.\Views\