【问题标题】:ASP.NET MVC: Get an action output within another actionASP.NET MVC:在另一个动作中获取动作输出
【发布时间】:2009-08-24 12:37:14
【问题描述】:

在 ASP.NET MVC 应用程序中,我有一个操作 Page() 来呈现页面(如 wiki 页面)。

现在,我有另一个动作 RenderPdf() 应该收集 Page() 的 HTML 输出并使用 HTML2PDF 组件创建该页面的 PDF 版本。

如何在另一个动作中收集一个动作的 HTML 输出。注意:不是在视图中,而是直接在动作代码中。

【问题讨论】:

    标签: asp.net-mvc rendering action


    【解决方案1】:

    您可以使用MVC Futures 程序集。

    有一个名为 RenderAction() 的方法可以获取动作的 HTML 输出,但从视图内部...

    【讨论】:

    • 其实布鲁诺,RenderAction() 是一个HtmlHelper,它被设计用来在视图中使用。它不允许 mladen 捕获渲染的输出。
    【解决方案2】:

    如果 pdf 只是输出的副本,您不能使用 javascript 捕获图像并传回 Render PDF 吗?

    或者,将 pdf 版本传递给与第一个操作相同的模型中的视图。如果/直到用户需要它时保持隐藏?

    【讨论】:

    • zsharp,这是我计划做的解决方法,但我对此并不满意。我会遇到 PDF 长达 100 页的情况。我不喜欢用 Javascript 来回传递这么大的 HTML。
    • 另一种方法可能是在操作代码中创建 pdf 并在渲染视图之前保存到服务器上的文件。访问带有唯一 id 的 pdf 以查看以匹配文件名中的 id。
    • zsharp,问题是 - 要创建 PDF 我首先需要 HTML,因为我使用的是 HTML2PDF 组件
    【解决方案3】:

    你可以查看这个遮阳篷来回答类似的问题:

    Send ASP.NET MVC action result inside email

    显然,您需要将 SendEmailKThx() 调用替换为 HTML2PDF PDF 生成。

    【讨论】:

      【解决方案4】:

      Jan Willem B 建议的方法有效,我在 ASP .NET MVC 1 上对此进行了测试。

      在调用 GetActionOutput 时,仅使用控制器的名称。例如,如果调用的控制器名称是 AccountController,则仅将其寻址为 Account。

      例如如果您想在 AccountController 上调用测试方法,则语法为... GetActionOutput("账户", "测试");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-22
        • 1970-01-01
        • 1970-01-01
        • 2010-11-23
        • 2014-06-19
        相关资源
        最近更新 更多