MVC.NET获取ActionFilterAttribute中的完整视图路径

时间:2018-04-06 07:06:47

标签: asp.net-mvc view path 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中执行操作后获取信息以保存临时路径并在以后使用它。 但是我仍然无法找到完整路径(我需要在上一次Action执行时返回的视图的完整路径,没有任何错误)。

我是否真的必须临时保存已执行的每个操作的完整路径?

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式访问动作过滤器中的视图路径:

function plusMinus( arr ){
  
  var pos = 0;
  var neg = 0;
  var zero = 0;
  var length = arr.length;

  for( let i = 0; i < length; i++ ){
    
    let value = arr[ i ];
    
    if( value > 0 ){
    
      pos += 1;
      
    } else if( value < 0 ) {
    
      neg += 1;
      
    } else {
    
      zero += 1;
      
    }
   
  }

  var FractionOfPostive = pos / length;
  var FractionOfNegative = neg / length;
  var FractionOfZero = zero / length;
    
  return {
    FractionOfPostive,
    FractionOfNegative,
    FractionOfZero
  };
    
}

console.log( plusMinus([-4,3,-9,0,4,1]) );

您应该准备好public override void OnResultExecuted(ResultExecutedContext filterContext) { ViewResult viewResult = filterContext.Result as ViewResult; RazorView view = viewResult?.View as RazorView; string viewPath = view?.ViewPath; // ... } 不是控制器返回的唯一可能的ViewResult。控制器可以返回其他操作结果(例如ActionResultHttpNotFoundResult)。在这种情况下,显然在动作过滤器中无法访问任何视图。构造JsonResult将返回filterContext.Result as ViewResult