如何在不同的控制器或动作中获取任何动作的渲染视图?
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
调用。
我有一些依赖于数据库设置的操作视图(例如是否显示文本框)。管理控制器中的设置已更改。 我想要实现的是在将更改保存到数据库后,在管理员的侧边栏(屏幕右侧)预览更改的视图。
有没有办法通过按钮(保存和预览)以字符串形式(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
调用。