[英]ASP.NET MVC return ViewResult
我試圖從ActionFilterAttribute
類返回OnActionExecuted
方法覆蓋中的ViewResult
如下......
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);
}
它可以返回到名為“Login”的視圖,但我需要將模型對象傳遞給此視圖(在這種情況下,模型對象是用戶的類型),我不知道如何直接使用ViewResult
類傳遞它。
有任何想法嗎?
更新:我已經解決了我的問題,將filterContext.ExceptionHandled
設置為TRUE,但主要問題沒有解決,我無法設置View
Model
屬性,它始終為null。
我遇到了同樣的問題,我傳遞給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;
}
我可能錯了,但我相信視圖數據是控制器基礎的一部分,而不是視圖本身的一部分。 所以你應該能夠通過這樣做來設置視圖數據:
filterContext.Controller.ViewData.Model = <your view model>
我剛剛測試過,這對我有用。 我認為沒有任何理由不適合你:
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
TestClass1 viewModel = new TestClass1();
viewModel.FirstName = "TestFilter";
filterContext.Controller.ViewData.Model = viewModel;
}
也許這對你有用:
filterContext.Result = new ViewResult { ViewName = "Exception", ViewData = new ViewDataDictionary(new CmsExceptionViewData(filterContext.Exception, action, controllerName, errorMessage)) };
因此ViewData是使用ViewDataDictionary創建的,它接受字典或模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.