提问人:Doe 提问时间:4/6/2018 更新时间:4/7/2018 访问量:707
MVC.NET 在 ActionFilterAttribute 中获取完整视图路径
MVC.NET Get full view path in ActionFilterAttribute
问:
如何在 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 中执行操作后获取信息,暂时保存路径并稍后使用。 但是我仍然无法找到完整路径(我需要在上次执行操作时返回的视图的完整路径,没有任何错误)。
我真的必须临时保存执行的每个操作的完整路径吗?
答:
1赞
CodeFuller
4/7/2018
#1
您可以通过以下方式从操作过滤器访问视图路径:
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
评论
ModelState