我有一个页面(使用母版页),在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>
提前致谢。
答案 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;
}
}