ASP.NET中Web.sitemap文件的尖括号无法正常输出如何处理?
问题根因
Web.sitemap解析器会自动将节点属性中编写的HTML实体转义为原始字符,你在title属性中写的</<这类实体,读取到Title字段时已经被转换为<字符。直接绑定到asp:HyperLink的Text属性时,服务器控件的默认编码逻辑未生效,导致<被直接输出到页面,被浏览器识别为HTML标签开头,因此出现无效的<t>标签。
可行解决方案
方案1:修改HyperLink绑定逻辑(推荐)
不要将Title绑定到Text属性,改为在HyperLink标签内部手动编码输出内容,可完全控制编码行为:
<asp:HyperLink runat="server" NavigateUrl='<%# Eval("Url") %>'> <%# Server.HtmlEncode(Eval("Title").ToString()) %> </asp:HyperLink>
也可以直接使用原生HTML的a标签,逻辑更直观无服务器控件隐藏逻辑干扰:
<a href='<%# Eval("Url") %>'><%# Server.HtmlEncode(Eval("Title").ToString()) %></a>
方案2:显式开启HyperLink的文本编码
如果希望继续使用Text属性绑定,可显式设置EncodeText="true"强制控件对Text内容做HTML编码,适配不同版本.NET的默认行为差异:
<asp:HyperLink runat="server" NavigateUrl='<%# Eval("Url") %>' Text='<%# Eval("Title") %>' EncodeText="true"> </asp:HyperLink>
两种方案都不需要修改Web.sitemap中的原有写法,也不需要额外写字符串替换逻辑。
内容的提问来源于stack exchange,提问作者wazz
相关产品推荐
相关产品推荐

