我想构建一个 API,允许在内部呈现 View :
- Iframe(常规 View )。
- 或者作为 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 应该有两个操作:
- 对于 iframe 中的 html 内容:仅渲染 View ,因此它是常规 MVC 操作
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/