ASP.NET MVC 3 - 隔离HTML.Raw输出

时间:2013-09-20 17:06:22

标签: html asp.net asp.net-mvc-3 razor

我正在开发一个系统,用户可以将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甚至应该被使用的方式,但这是我正在修改的实现,而不是创建,我想保留尽可能多的原始实现可能的。

3 个答案:

答案 0 :(得分:1)

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

是的,CSS不能在iframe中使用,但您可以像在父页面中那样将相同的CSS注入iframe。但显然父页面布局不会跟随iframe的内容(例如,如果iframe中有一个大div,则父页面不会使iframe变大)

答案 1 :(得分:0)

显示用户输入的HTML而不影响您的观看次数的最佳选择是使用IFrame。您可以手动set the content of an IFrame using Javascript

答案 2 :(得分:0)

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

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

这可能适用于您,也可能不适合您。我发现这种情况非常方便,因为我知道那个打算输入内容的人需要格式化,但不知道html。

相关问题