如何防止DIV内的文字中的HTML代码影响外部页面样式

时间:2011-03-16 19:49:21

标签: asp.net html css

我有一个页面(使用母版页),在DIV中有一个文字控件,我在其中从我无法控制的数据库记录中加载HTML源代码(HTML来自MS Word文档)。 在将文档加载到文字中之前,我的页面看起来很好。然后属于母版页的一些元素的样式受到影响。在我看来,我正在加载的文档中存在影响母版页元素的CSS样式。

我是否可以将外页与我正在加载的HTML隔离开来?

以下是包含(外部)页面的一部分:

<tr>
    <td colspan="4">  
        <div id="sowDiv" style="overflow:scroll; width:800; height:500px">
            <!-- The literal control loads the MS Word HTML source -->
            <asp:Literal runat="server" ID="sowLiteral" ></asp:Literal>                                                                            
        </div>
    </td>
</tr>

提前致谢。

3 个答案:

答案 0 :(得分:3)

我建议将IFrame与Http Handler结合使用。

<tr>
    <td colspan="4">  
        <iframe src="GetContent.ashx?id=<%=Id%>" style="border:0px;" height="500px" width="800px">Loading...</iframe>
    </td>
</tr>

在web.config中,在HttpHandlers下,你需要为此添加一个http处理程序:

<add verb="GET" path="GetContent.ashx" type="MyApp.ContentHandler"/>

http处理程序将返回word文档的html(来自数据库):

namespace MyApp
{
    public class ContentHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            // This needs some better error handling
            int id = (int) context.Request.QueryString.Get("id");

            // Get content from database
            string content = GetContentById(id);

            // Display the content
            context.Response.Write(content);
            context.Response.End();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

建议在http处理程序周围添加一些额外的安全性,以确保不仅可以更改ID以将任何内容返回给未经授权的用户,但这应该是一个很好的起点。

(另请注意,如果您确实需要从会话中获取任何数据进行身份验证,请不要忘记将IReadOnlySessionState添加到http处理程序,以便它可以访问会话。)

答案 1 :(得分:2)

不允许文字控件中的意外数据 - 在转换层中获取输入并将其转换为可接受的(已检测的)输出。

然而,由于这是一项很好的工作(除非有一个库?:-)然后,作为一个快速的“修复”,考虑一个iframe。

至少iframe可以通常显示文字控件确实是罪魁祸首,尽管完整的HTML / CSS检查也是如此。

快乐的编码。

答案 2 :(得分:1)

我在.aspx中使用:

<div id="dvEjemplo" runat="server" style="border-style: inset; border-width: thin">
  <asp:Literal ID="litEjemplo" runat="server" Mode="encode" visible="false">     </asp:Literal>
  <asp:Label ID="lblEjemplo" runat="server" Height="380px"></asp:Label>

和代码(aspx.cs)

public string Fundamento
{
    set
    {
        this.litEjemplo.Text = value;
        this.lblEjemplo.Text = this.litEjemplo.Text;
    }
}