如何在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执行时返回的视图的完整路径,没有任何错误)。
我是否真的必须临时保存已执行的每个操作的完整路径?
答案 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
。控制器可以返回其他操作结果(例如ActionResult
或HttpNotFoundResult
)。在这种情况下,显然在动作过滤器中无法访问任何视图。构造JsonResult
将返回filterContext.Result as ViewResult
。