0

我有一个自定义锚创建功能

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

有什么建议么?

4

1 回答 1

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',那么这会导致问题。

于 2012-10-23T14:06:10.443 回答