gpt4 book ai didi

javascript - MVC3 - 允许 View 呈现为 html 或 JS

转载 作者:行者123 更新时间:2023-11-28 09:31:33 25 4
gpt4 key购买 nike

我想构建一个 API,允许在内部呈现 View :

  1. Iframe(常规 View )。
  2. 或者作为 JS (document.write)。

开发人员有时会使用 Iframe,有时会使用脚本。

所以一次你可以调用 Iframe:

//will render <html><body><div>I am a div</div></body></html>
<iframe src="/page/mysqldata?mod=iframe"></iframe>

有一次我想将 html 获取为 JS

//will render document.write('<div>I am a div</div>');
<script src="/page/mysqldata?mod=js"></script>

您知道如何设置它的教程吗?
顺便说一句,我的 View 很复杂,有大量 @Html 调用以及 RenderSection@Html.Partial 调用。

底线是我想提供 html 两种不同的方法,iframe 和脚本,但我想保留一个 View 。

谢谢

最佳答案

你能做的就是采用 Alex 的 RenderPartialViewToString() 实现来自this SO answer ,它允许您直接在 Controller 内将 View 渲染为字符串。

您可以创建一个 View 和一个部分。 Partial 将所有内容绑定(bind)到模型,而 View 可以添加 <html><body> ...ETC。使用 Razor 创建所有 View ,并将它们设置为您想要的复杂程度,它们只是常规 View 。

现在你的 Controller 应该有两个操作:

  1. 对于 iframe 中的 html 内容:仅渲染 View ,因此它是常规 MVC 操作
  2. JS内容:调用RenderPartialViewToString ,而不是输出 html,执行以下操作:

    public JavaScriptResult AsJavascript()
    {
    var theModel = //create the model
    var content = // call to RenderPartialViewToString(this, "PartialViewName", theModel);
    var script = String.Format("document.write('{0}')",
    content.Replace("'", "\'").Replace(Environment.NewLine, ""));
    return this.JavaScript(script);
    }

过去我也曾做过类似的事情,但我使用了 jquery而不是直接写入文档,因此代码更简洁,通过创建 DIV ,设置内容为 div.html(content) ,然后将该 div 附加到页面正文。但最终结果应该是一样的。

关于javascript - MVC3 - 允许 View 呈现为 html 或 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13660439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com