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