锚标签无法在Safari,Chrome,Firefox中使用

时间:2012-10-23 13:54:19

标签: asp.net

我有自定义锚点创建功能

public static Anchor Create(string name, object variant)
{
    return new Anchor(string.Format("{0}{1}", (name.StartsWith("#") ? name : string.Format("#{0}", name)), variant).Replace(' ', '_'));
}

public static Anchor Create(string name)
{
    return Create(name, string.Empty);
}

在网页上创建锚标记。以下是对.ascx控件

的调用
<asp:DataList ID="_meterLinkBar" runat="server" RepeatDirection="Horizontal" CssClass="bodytext4" RepeatLayout="Flow">
<ItemTemplate>
   <a href='<%# Anchor.Create("Meter", Container.ItemIndex + 1) %>' title='<%#  Eval("Name", "{0} measurement results") %>'>
  <%# FormatMeterName(Eval("Name") as string, Container.ItemIndex) %></a>
</ItemTemplate>

<SeparatorTemplate>|</SeparatorTemplate>
<FooterTemplate>
    <hr style="height: 1px; border-width: 0; color: #006690; background-color: #006690;" />
</FooterTemplate>
</asp:DataList>

以下是具有锚标记

的实际项目
<ItemTemplate>
<a id='<%# Anchor.Create("Meter", Container.ItemIndex + 1) %>'></a>
....
</ItemTemplate>

修改

这是toString方法

public override string ToString()
{
    return _name;
}

以下是构造函数

private Anchor(string name)
{
    _name = name;
}

现在一切都在IE中运行,但在其他浏览器中,链接是正确呈现的,但实际的锚标签本身显示为## whatever

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

理想情况下,我们可能需要查看生成的HTML。听起来你得到两个#href="##name"。如果是这种情况,那么Anchor的.toString()方法可能还会在锚名称之前添加#。因此,在这种情况下,如果它在IE中工作,那是因为IE忽略了重复,而其他浏览器不会忽略它。

检查.toString()方法并查看其中的内容。如果它还添加了#,那么您需要像这样更改代码:

public static Anchor Create(string name, object variant)
{
    return new Anchor(string.Format("{0}{1}", 
        (name.StartsWith("#") ? name.Replace('#','') : name),
        variant).Replace(' ', '_'));

}

修改

啊,我很傻。我刚才意识到,你把它放在<a>标签的“ID”中。你不要把#放入ID中。您只能将其放入href="#Meter",例如

<a id='Meter' name='Meter'></a>

<a href='#Meter'>Go back to Meter</a>

如果您的id ='#Meter',则会导致问题。