2010-11-21 65 views
0

我有BulletedListDisplayMode="HyperLink"如何让asp.net超链接停止对url的编码?

<asp:BulletedList runat="server" DisplayMode="HyperLink" ID="LevelsList"></asp:BulletedList> 

我将项目添加到列表中使用此代码: LevelsList.Items.Add(新列表项(curSubPage.PageName,curSubPage.shortURL));

的URL链接包含希伯来语的字符串,他们得到编码:

的的asp.net生成的标记是类似的东西:

<a href="%d7%91%d7%a0%d7%99%d7%99%d7%aa_%d7%90%d7%a4%d7%9c%d7%99%d7%a7%d7%a6%d7%99%d7%95%d7%aa_%d7%90%d7%99%d7%a0%d7%98%d7%a8%d7%a0%d7%98%d7%99%d7%95%d7%aa">בניית אפליקציות אינטרנטיות</a> 

,而右边的标记应该是:

<a href="בניית_אפליקציות_אינטרנטיות">בניית אפליקציות אינטרנטיות</a> 

我该如何解决?

+0

谷歌似乎将这两个网址视为不同的网页,这意味着双倍的内容.. – IgalSt 2010-11-21 10:21:45

+0

也许你可以检查你的asp.net程序的文化信息? – xandy 2010-11-21 10:25:41

回答

0

从快速调查,看起来像ASP.NET正在编码它的“低级”代码,所以没有直接的解决方案。

你可以简单地写自己的项目符号列表使用自定义复读:

<asp:Repeater id="rptLevelsList" runat="server"> 
    <HeaderTemplate><ul></HeaderTemplate> 
    <FooterTemplate></ul></FooterTemplate> 
    <ItemTemplate> 
     <li><a href="<%# DataBinder.Eval(Container.DataItem, "Value") %>"><%# DataBinder.Eval(Container.DataItem, "Text") %></a></li> 
    </ItemTemplate> 
</asp:Repeater> 

并将其在后面的代码绑定:

List<ListItem> links = new List<ListItem>(); 
links.Add(new ListItem("my page", "Somepage.aspx")); 
links.Add(new ListItem("משהו בעברית", "http://www.כתובת_כלשהי_כאן.com")); 
rptLevelsList.DataSource = links; 
rptLevelsList.DataBind(); 

注意,从我所看到的,IE8仍然没有不支持非英文网址地址 - 上述链接无法在该浏览器中点击,而Chrome则允许您点击该地址,但也会将网址编码为其他内容。

+0

感谢您的回答。这些链接在IE7和8中也可以点击,而且它们也没有编码 – IgalSt 2010-11-21 12:10:57