簡體   English   中英

ASP.NET MVC返回ViewResult

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM