我有自定义锚点创建功能
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
有什么建议吗?
答案 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',则会导致问题。