如何在不同的控制器或动作中获取任何动作的渲染视图?

How can I get rendered View for any Action inside different Contoller or Action?

我有一些依赖于数据库设置的操作视图(例如是否显示文本框)。管理控制器中的设置已更改。 我想要实现的是在将更改保存到数据库后,在管理员的侧边栏(屏幕右侧)预览更改的视图。

有没有办法通过按钮(保存和预览)以字符串形式(HTML)单击以显示在边箱?

或者还有其他更好的主意吗?

是的。它们被称为子动作。简单地说,你只需通过 Html.Action:

调用你想要呈现的动作
@Html.Action("SomeAction", "SomeController")

但是,有几点需要牢记。首先,您的子动作应该 return PartialView。否则,您将在调用操作的位置再次呈现完整布局。如果您想对常规视图和子操作使用相同的操作。你可以分支你的 return:

if (ControllerContext.IsChildAction)
{
    return PartialView();
}

return View();

其次,如果您只 return PartialView,那么该操作应该无法直接路由到。否则,有人可以在他们的浏览器中输入 URL 以转到此子操作,并且只有部分视图会被 returned,没有布局。您可以使用 ChildActionOnly 属性防止这种情况发生:

[ChildActionOnly]
public ActionResult MyAwesomeChildAction()
{
    ...
}

然后,此操作将只能通过 Html.Action 调用。