【问题标题】:How can I get rendered View for any Action inside different Contoller or Action?如何获得不同控制器或动作中任何动作的渲染视图?
【发布时间】:2015-01-14 14:49:19
【问题描述】:
我有一些依赖于数据库设置的操作视图(例如是否显示文本框)。管理控制器中的设置已更改。
我想要实现的是在将更改保存到数据库后,在管理员的侧边框中(屏幕右侧)预览更改的视图。
有没有办法通过按钮(保存和预览)以字符串 (HTML) 的形式单击以显示在侧边框中来获取另一个操作的视图结果(偶然返回 View())?
或者也许还有其他更好的主意?
【问题讨论】:
标签:
asp.net-mvc
asp.net-mvc-4
razor
razor-2
【解决方案1】:
是的。它们被称为子动作。简单地说,你只需通过Html.Action 调用你想要渲染的动作:
@Html.Action("SomeAction", "SomeController")
但是,有几件事要记住。首先,您的子操作应返回PartialView。否则,您将在调用操作的位置再次呈现完整的布局。如果您想对常规视图和子操作使用相同的操作。你可以分支你的回报:
if (ControllerContext.IsChildAction)
{
return PartialView();
}
return View();
其次,如果您只返回PartialView,那么该操作不应该可以直接路由到。否则,有人可以在他们的浏览器中输入 URL 以转到此子操作,并且只会返回部分视图,而没有布局。您可以使用ChildActionOnly 属性防止这种情况发生:
[ChildActionOnly]
public ActionResult MyAwesomeChildAction()
{
...
}
那么,这个动作将只能通过Html.Action调用。