使用MVC w / ACE Editor编辑HTML文件

时间:2015-03-21 20:13:39

标签: c# html model-view-controller

我正在尝试构建一个可以读取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的结果是这样的,有些<html><head>等标签被删除了。

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

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

提前致谢

2 个答案:

答案 0 :(得分:1)

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

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

我把div留空了

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

然后我只使用文本区域的值作为ACE编辑器的值。

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);

答案 1 :(得分:0)

这很有意思。

似乎@Html.Raw清理了输入;这通常是一个好主意 但是在你的情况下;它似乎没那么帮助你。

但是,不允许使用多个<html><body>标记。请参阅此问题:Multiple <html><body> </html></body> in same file

如果知道删除了这些标记,则只需重新添加它们即可。然而就是说;我认为你对此采取了错误的做法。

如果您要做的只是从HTML文档中返回一个静态HTML文件,那么您可以按原样提供#34;&#34;。如果你想要做到这一点&#34;动态&#34;不知何故(可能是从数据库或类似的)然后你应该使用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。它的行为通常并不令人惊讶。