ASP.NET资源文件嵌入HTML链接失效问题求助
解决ASP.NET资源文件中嵌入HTML链接的问题
嘿,我来帮你搞定这个问题!你现在遇到的情况很典型:用CDATA包裹HTML的话,链接显示成纯文本;去掉CDATA,内容直接消失。这根源在于ASP.NET默认对资源内容的处理方式——要么把HTML当纯文本输出,要么被XML解析器误判成标签吃掉。下面给你两个实用的解决办法:
方法一:保留CDATA,用Literal控件解析HTML
别再直接用<%$ Resources:CultureDependent, BannerTextMain %>输出了,换成Literal控件,关键是要设置它的Mode为PassThrough(或者根据.NET版本设Encode=False),让控件直接把资源里的HTML渲染出来,而不是当成纯文本:
<asp:Literal ID="litBannerText" runat="server" Mode="PassThrough" Text="<%$ Resources:CultureDependent, BannerTextMain %>"></asp:Literal>
要是习惯后台代码绑定也可以这么写:
litBannerText.Text = Resources.CultureDependent.BannerTextMain; litBannerText.Mode = LiteralMode.PassThrough;
这样CDATA里的链接就能正常点击啦。
方法二:转义HTML字符,不用CDATA
如果你不想用CDATA,就把HTML标签里的<和>转成XML实体<和>,这样XML解析器就不会把它们当成标签处理了,资源文件改成这样:
<data name="BannerTextMain" xml:space="preserve"> <value>Test String, <html><body> <a href="/vacatures">link!</a></body></html></value> </data>
之后还是用Literal控件输出(别用Label,它会自动编码),同样能渲染出可点击的链接。
小提醒
- 绝对别用
Label控件来输出这些内容!Label默认会把HTML编码,不管你怎么弄都会显示成纯文本链接。 - 如果链接地址以后可能变动,建议把URL单独放到一个资源项里,页面里再拼接内容,这样维护起来更方便。
内容的提问来源于stack exchange,提问作者user3127554
相关产品推荐
相关产品推荐

