如何使asp.net超链接停止编码网址?

时间:2010-11-21 10:18:50

标签: asp.net hyperlink urlencode

我有一个BulletedList DisplayMode="HyperLink"

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

我使用以下代码将项目添加到列表中:     LevelsList.Items.Add(new ListItem(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>

我该如何解决?

1 个答案:

答案 0 :(得分: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允许您点击它,但也会将网址编码为其他内容。 / p>