C# ASP.NET MVC:如何在操作筛选器中访问视图名称

C# ASP.NET MVC:如何在操作筛选器中访问视图名称,c#,asp.net,asp.net-mvc,action-filter,C#,Asp.net,Asp.net Mvc,Action Filter,我已经写了下面的模型验证操作过滤器- public override void OnActionExecuting(ActionExecutingContext filterContext) { var viewData = filterContext.Controller.ViewData; var viewNme = filterContext.Controller; if (!viewData.ModelState.IsVal

我已经写了下面的模型验证操作过滤器-

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var viewData = filterContext.Controller.ViewData;
        var viewNme = filterContext.Controller;
        if (!viewData.ModelState.IsValid)
        {
            filterContext.Result = new ViewResult
            {
                ViewData = viewData,
                ViewName = "Test"

            };
        }
        base.OnActionExecuting(filterContext);
    }
如果我没有通过
ViewName=“WhitePaper”
它将失败,并显示以下消息- “/Travelers.eBusiness.Travelers.Web”应用程序中出现服务器错误

找不到视图“索引”或其主视图,或者没有视图引擎支持搜索的位置。搜索了以下地点:

我的问题是—
如何传递视图信息

您可以在
OnActionExecuted
事件中获取结果的视图名称

这将为您提供视图名称

public override void OnActionExecuted(ActionExecutedContext filterContext)
{       
    var viewData = filterContext.Controller.ViewData;
    var view = filterContext.Result as ViewResultBase;
    if (view != null)
    {
        string viewName = view.ViewName;
        // If we did not explicitly specify the view name in View() method,
        // it will be same as the action name. So let's get that.
        if (String.IsNullOrEmpty(viewName))
        {
            viewName = filterContext.ActionDescriptor.ActionName;
        }
        // Do something with the viewName now

    }
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
   var actionMethodName = filterContext.ActionDescriptor.ActionName;
   // This will be same as your view name if you are not explicitly
   // specifying a different view name in the `return View()` call

}
执行操作方法后,
filterContext.Controller.ViewData
将可用(非空)。但是如果您想在<代码> OnAction Reals事件中,您可能会考虑读取动作名称并使用它(假设您的动作方法正在返回一个视图而不显式指定视图名)。
是否要获取当前操作方法的视图名称?是的,我希望视图名称可能重复:这不能解决问题。此筛选器用于模型验证。此处返回的视图名称是重定向页面的名称。我们正在
return view()
调用中指定不同的视图名称。因此,在执行该方法之前,您无法获取视图名称,因为您的操作方法可以根据某些条件返回任何视图。