代码之家  ›  专栏  ›  技术社区  ›  IgalSt

如何使asp.net超链接停止对URL进行编码?

  •  0
  • IgalSt  · 技术社区  · 14 年前

    我有一个 BulletedList 具有 DisplayMode="HyperLink" .

    <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>
    

    我该怎么修?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Shadow Wizard    14 年前

    从快速的调查来看,似乎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仍然不支持非英语URL地址-上面的链接在浏览器中不可单击,而Chrome允许您单击它,但也将URL编码为其他内容。