我做了一个站内信的asp.net程序,在发送消息的SendMessage.aspx中:
(Message是我定义的一个类,完成处理Message的相关工作)
IMessage word = new Message();
(进行对用户输入内容的有效性以及安全性检查)
Message.AddMessage(...,Server.HtmlEncode(MsgTitle.Text.Trim()),Server.HtmlEncode(MsgBody.Text.Trim()),...);
这样用户输入的信息就以HtmlEncode的形式存入了数据库。
然后在显示消息的时候:
IMessage word = new Message();
OleDbDataReader DBReader = word.GetSingleMessage(MessageID);
MsgTitle.Text = Server.HtmlDecode(DBReader[ "Title "].ToString());
MsgBody.Text = Server.HtmlDecode(DBReader[ "Body "].ToString());
以上两段代码都能够正常处理标题或内容中含有 <script> 的情况。
但是问题如下:
在一个前台页面(MessageManage.aspx)的GridView控件的内容中,实现只显示邮件内容的前30个字符+省略号:
<asp:TemplateField HeaderText= "信件内容 ">
<ItemTemplate>
<%# SystemTools.ShortTitle(Server.HtmlDecode(Eval( "Body ").ToString()), 25) %>
</ItemTemplate>
</asp:TemplateField>
如果数据库中的内容是:
1、“ <script> alert( "Warning "); </script> ”这样完整的内容,经过HtmlDecode后依然会有IE警告对话框弹出,这是不应该的。
2、“ <script> alert( "Warning”这样“不完整”的内容,该单元格以后的所有内容都不会被显示,运行后的HTML如下:
<td align= "left ">
<script> alert( "Warning!!!...
</td>
请大家帮忙如何解决在GridView控件中的数据绑定过程中能够正确显示数据库中的原内容(不解析任何语句)?
最好能有 <ItemTemplate> 的源码,完成内容的30个字符+省略号和显示数据库原内容的两项功能。
谢谢!
------解决方案--------------------------------------------------------
<%# Server.HtmlEncode(Eval( "Body ").ToString())%>
或者﹕
<%# Server.HtmlEncode(DataBinder.Eval(Container.DataItem, "Body ").ToString())%>
輸出不用:HtmlDecode
就用:HtmlEncode