【问题标题】:Edit HTML file using MVC w/ ACE Editor使用带有 ACE 编辑器的 MVC 编辑 HTML 文件
【发布时间】:2015-03-22 19:30:09
【问题描述】:

我正在尝试构建一个可以读取 HTML 文件内容并将其数据输出到屏幕的页面。

要获取我正在做的 HTML 文件数据:

ViewBag.PageHtml = System.IO.File.ReadAllText(@"W:\1.html");

然后在视图中,我有以下内容

 @Html.Raw(ViewBag.PageHtml)

HTML 数据是这样的:

<html>
    <head>
        <title>Test Title</title>
    </head>
    <body>
        <p>The body</p>
    </body>
</html>

Html.Raw 的结果是这样的,&lt;html&gt;&lt;head&gt; 等标签是如何被删除的。

<title>Test Title</title>
<p>The body</p>

有人可以向我解释为什么会这样,以及如何防止它发生吗?

提前致谢

【问题讨论】:

    标签: c# html model-view-controller


    【解决方案1】:

    我自己设法解决了这个问题,第一步是添加一个隐藏的 textarea 字段。

    <textarea id="templateHtml" style="display: none">@ViewBag.PageHtml</textarea>
    

    我像这样把 div 留空了

    <div id="txtArea"></div>
    

    然后我只是将文本区域的值作为ACE Editor的值。

    var el = document.getElementById("txtArea");
    editor = ace.edit(el);
    editor.session.setValue($("#templateHtml").val());
    editor.setTheme("ace/theme/github");
    editor.getSession().setMode("ace/mode/html");
    editor.setOption("showPrintMargin", false);
    

    【讨论】:

    • 很高兴看到你解决了它!这是一个更具体的编辑问题,如果您的问题更具体,那就太好了。不管怎样,干得好!
    【解决方案2】:

    这很有趣。

    似乎@Html.Raw 净化了输入;这通常是个好主意。
    但是,在您的情况下;它似乎对你没有多大帮助。

    但是,不允许有多个 &lt;html&gt;&lt;body&gt; 标签。看到这个问题:Multiple <html><body> </html></body> in same file

    如果您知道这些标签已被删除,那么只需重新添加它们。然而,话虽如此;我认为您对此的处理方法有误。

    如果您只想从 HTML 文档返回静态 HTML 文件,那么您可以“按原样”提供此文件。如果您希望以某种方式“动态地”执行此操作(可能来自数据库或类似的),那么您可能应该直接从控制器使用ContentResult

    namespace Project.Controllers
    {
        public class HomeController : Controller
        {
            public ContentResult ServePureHtml()
            {
                string htmlData = System.IO.File.ReadAllText(@"W:\1.html");
    
                return Content(htmlData, "text/html");
            }
        }
    }
    

    您也可以将其用作部分结果。使用Html.ActionHtml.RenderAction

    例如

    <!-- ... -->
    <div class="editor-content">
        @{
             Html.RenderAction("ServePureHtml", "Home");
        }
    
    </div>
    <!-- ... -->
    

    另外,请谨慎使用 ViewBag。它的行为通常并不令人惊讶。

    【讨论】:

    • 谢谢,但这会返回完全相同的结果
    • 但是您是否尝试将完整的 HTML 文档添加到已经存在的文档中?这是(如我所说)不允许的。如果您必须添加整个文档(包括 html、head 和 body 标签),则使用 iframe。你的问题还是有点模糊。
    • 抱歉模糊,我的主要目标是编辑 HTML 的内容。所以不,我没有添加两组 HTML 标签等,我只是想让人们从浏览器编辑 .html 文件的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多