ASP.NET MVC 3 - 隔离 HTML.原始输出



我正在开发一个系统,用户可以向系统提交 HTML,然后"预览"生成的页面。用户提交的 HTML 通过调用 HTML 提供给页面。原始数据,它与其他数据显示为表的一部分。在朴素的实现中,它的显示方式如下:

...
    <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 的一种方式,但这是我正在修改而不是创建的实现,我想尽可能多地保留原始实现。

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

是的,CSS 在 iframe 中不起作用,但您可以将与父页面相同的 CSS 注入到 iframe 中。但显然父页面布局不会遵循 iframe 的内容(例如,如果 iframe 中有一个大的div,父页面不会使 iframe 变大)

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

查看 html 属性 contenteditable。它确保修改应用此属性的div 内容的人不必处理 html,但 html 将被生成。

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

这可能对您有用,也可能不适合您。我发现它非常方便,当我知道那个人,谁将要输入内容需要格式化,但对html一无所知。

最新更新