我试图从类中返回一个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)
我可能是错的,但我相信视图数据是控制器基础的一部分,而不是视图本身的实际部分。因此,您应该能够通过执行以下操作来设置视图数据:
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)
| 归档时间: |
|
| 查看次数: |
18160 次 |
| 最近记录: |