ASP.NET MVC返回ViewResult

ozs*_*gal 7 c# asp.net-mvc

我试图从类中返回一个ViewResultin OnActionExecuted方法覆盖ActionFilterAttribute

如下......

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
    if (CreateCookie && filterContext.Exception == null)
    {
        LoginCookies lcookie = new LoginCookies(usuDs, usuSenha);
        lcookie.WriteCookie("SCE", 10);
    }
    else
    {
        filterContext.Result = new ViewResult() { ViewName = "Login" };
        filterContext.Result.ExecuteResult
                (filterContext.Controller.ControllerContext);
    }
Run Code Online (Sandbox Code Playgroud)

它可以返回到名为"Login"的视图,但我需要将模型对象传递给此视图(在这种情况下,模型对象是用户的类型),我不知道如何ViewResult直接使用类传递它.

有任何想法吗?

更新: 我已经解决了我的问题设置filterContext.ExceptionHandled为TRUE,但主要问题没有解决,我无法设置Model属性View,它始终为null.

tok*_*ble 10

我遇到了同样的问题,我传递给View的Model总是为NULL.我能够通过以下方式将模型传递给我的视图:

创建viewModel并设置属性.创建一个新的ViewResult,为其指定View的名称,然后将viewModel传递给ViewData.

public override void OnActionExecuted(ActionExecutedContext filterContext)
{

    TestViewModel viewModel = new TestViewModel; 

    //Here set all the properties of your viewModel such as your exception message

    filterContext.Controller.ViewData.Model = viewModel;
    filterContext.Result = new ViewResult { ViewName = "Login", ViewData = new ViewDataDictionary(viewModel)};
    filterContext.ExceptionHandled = true;

}
Run Code Online (Sandbox Code Playgroud)


jos*_*ers 2

我可能是错的,但我相信视图数据是控制器基础的一部分,而不是视图本身的实际部分。因此,您应该能够通过执行以下操作来设置视图数据:

filterContext.Controller.ViewData.Model = <your view model>
Run Code Online (Sandbox Code Playgroud)

我刚刚测试过,这对我有用。我看不出有任何理由它不适合你:

public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        TestClass1 viewModel = new TestClass1();

        viewModel.FirstName = "TestFilter";

        filterContext.Controller.ViewData.Model = viewModel;
    }
Run Code Online (Sandbox Code Playgroud)

参考文档