Razor 在控制器内调用View()不会';t立即执行ActionResult代码

Razor 在控制器内调用View()不会';t立即执行ActionResult代码,razor,asp.net-mvc-4,Razor,Asp.net Mvc 4,我有以下控制器操作: public ActionResult MyAction(...) { ActionResult result = View("MyView", new MyModel()); var fruit = TempData["Fruit"]; // Do something with the fruit return result; } 这个MyView.cshtml @model MyModel @{ TempData["Fru

我有以下控制器操作:

public ActionResult MyAction(...)
{
    ActionResult result = View("MyView", new MyModel());

    var fruit = TempData["Fruit"];
    // Do something with the fruit

    return result;
}
这个MyView.cshtml

@model MyModel
@{ 
    TempData["Fruit"] = "Mango";
}
当我在设置了
TempData[“Fruit”]
的视图中放置断点时,不会在操作中的“
返回结果”
”之前调用断点。
Razor
渲染似乎延迟

如何在从
result=View(..)
调用返回时强制渲染视图


注意:不要担心这个简单的例子。我们有一个真正的用例,需要解决这个问题,但我不想让这个问题变得更加复杂。

直到操作完成后才呈现视图。您可以调用result.ExecuteResult(ControllerContext)强制在操作内部提前执行ActionResult,如下所示:

    ActionResult result = View("Details", new PageModel(page));
    result.ExecuteResult(ControllerContext);
但是您将遇到一个问题,因为当操作返回结果时,ActionResult将再次执行,因此您必须取消第二次执行

您可以这样做:

    protected override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        if (cancelTheResult)
        {
            filterContext.Cancel = true;
        }
        base.OnResultExecuting(filterContext);
    }

这一切看起来确实有点像黑客,但在某些情况下,这似乎是必要的。例如,如果子操作需要告诉顶层操作执行重定向,则在子操作完成之前,我们不知道是否需要重定向,但子操作直到太晚才完成。这是我能找到的唯一解决方法。

直到操作完成后才呈现视图。您可以调用result.ExecuteResult(ControllerContext)强制在操作内部提前执行ActionResult,如下所示:

    ActionResult result = View("Details", new PageModel(page));
    result.ExecuteResult(ControllerContext);
但是您将遇到一个问题,因为当操作返回结果时,ActionResult将再次执行,因此您必须取消第二次执行

您可以这样做:

    protected override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        if (cancelTheResult)
        {
            filterContext.Cancel = true;
        }
        base.OnResultExecuting(filterContext);
    }
这一切看起来确实有点像黑客,但在某些情况下,这似乎是必要的。例如,如果子操作需要告诉顶层操作执行重定向,则在子操作完成之前,我们不知道是否需要重定向,但子操作直到太晚才完成。这是我唯一能找到的解决办法