【问题标题】: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调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      相关资源
      最近更新 更多