如何在 ActionFilterAttribute 中获取当前渲染视图的完整视图路径?我找不到解决方案。
我只想在 OnActionExecuted(自定义验证等)中做一些事情,如果验证失败,我想显示带有验证错误的调用站点 - 这对我来说似乎很简单,但事实并非如此,因为我不能找到最新渲染视图的完整路径...
到目前为止,它使用此代码在 OnActionExecuted 上工作,用于硬编码视图。
filterContext.Result = new ViewResult() {
ViewName = "~/Views/Login/Index.cshtml", // This is the path of the view with the calling form
ViewData = new ViewDataDictionary(filterContext.Controller.ViewData) {
Model = ApplicationFiler.GetViewModel(filterContext)
}
};
到目前为止,我认为我可以在上下文中获得最新渲染视图的完整路径,但我不能。如何获得真正渲染的完整路径?
然后我想,也许我可以在 OnActionExecuted 中获取操作执行后的信息来临时保存路径,以便以后使用。但是我仍然无法找到完整路径(我需要上次执行 Action 时返回的视图的完整路径,没有任何错误)。
我真的必须临时保存执行的每个操作的完整路径吗?
您可以通过以下方式从操作过滤器访问查看路径:
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
ViewResult viewResult = filterContext.Result as ViewResult;
RazorView view = viewResult?.View as RazorView;
string viewPath = view?.ViewPath;
// ...
}
您应该准备好这ViewResult
不是ActionResult
控制器返回的唯一可能。控制器可以返回其他操作结果(例如HttpNotFoundResult
或JsonResult
)。在这种情况下,显然无法在操作过滤器中访问视图。构造filterContext.Result as ViewResult
将返回null
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句