4

我正在开发一个系统,用户可以将 HTML 提交到系统,然后“预览”生成的页面。用户提交的 HTML 通过调用视图中的 HTML.Raw 提供给页面,在视图中它显示为包含其他数据的表格的一部分。在一个幼稚的实现中,它的显示如下:

...
    <td>
        <div>@Html.Raw(UserEnteredHTMLIsFetchedHere)</div>
    </td>
...

我遇到的问题是用户输入的 HTML 不能保证没有错误(实际上远非如此)。如果用户在 HTML 中输入一个未闭合的 div 标记然后去预览它,则 Html.Raw 返回的未闭合标记将在 Html.Raw 调用之外的 /div 上闭合,并在整个页面上创建不正确的嵌套。

我正在寻找一种方法来隔离 Html.Raw 的输出,以便未关闭的标签不会干扰页面的其余部分。

我尝试使用 iframe 标记来完成此操作(将 src 设置为编码的 HTML),但它与 CSS 并没有很好的配合。如果可能的话,我希望将页面的现有 CSS 保留在隔离的 HTML 中。

我不确定这是否是 Html.Raw 甚至应该使用的一种方式,但这是我正在修改而不是创建的实现,我想尽可能多地保留原始实现。

4

3 回答 3

1

要理解的重要一点是,这绝不是一个好主意,除非您正在创建一个 CMS 系统(请参阅我的答案https://stackoverflow.com/a/4146470/467198

是的,CSS 在 iframe 中不起作用,但您可以将相同的 CSS 注入到 iframe 中,就像在父页面中所做的那样。但显然父页面布局不会跟随iframe的内容(比如iframe中有一个大的div,父页面不会让iframe变大)

于 2013-09-20T19:09:49.567 回答
0

在不影响视图的情况下显示用户输入的 HTML 的最佳选择是使用 IFrame。您可以使用 Javascript 手动设置 IFrame 的内容

于 2013-09-20T17:26:46.617 回答
0

查看 html 属性contenteditable。它保证了无论谁修改了应用了该属性的 div 的内容,都不必处理 html,但会生成 html。

它也允许格式化。例如,您可以按 Ctrl+B 并且突出显示的内容会变为粗体。或者您可以在 MS Word 中输入内容,根据需要设置格式,然后将其复制粘贴到 div 中。

这可能对您有用,也可能不适用。当我知道要输入内容的人需要格式化但不知道 html 时,我发现它非常方便。

于 2013-09-20T17:47:25.153 回答