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

标签 javascript asp.net-mvc-3 view render

我想构建一个 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/

相关文章:

javascript - JS在 Accordion 中隐藏嵌套列表

javascript - AngularJS http 调用(完整语法)

c# - MVC 3 适合公共(public)生产站点吗?

image - Qt 图形 View ,显示图像! , 小部件

javascript - 如何在ES6+flow中增加Map项?

javascript - 带有 Zen Coding 的 CodeMirror 不工作

c# - 在 web.config 中存储一系列值 - 使用什么数据结构

asp.net-mvc - ASP.NET MVC 中可能出现表单值被替换的错误

Android如何在隐藏 View 时使用自动布局移动其他 View ?

android - 如何使用 xml 中的可绘制形状绘制半椭圆形 (Android)