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);
}

これにより、Web ページにアンカー タグが作成されます。以下は、.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 も確認する必要があります。2 つの # を取得しているように聞こえますhref="##name"。その場合、アンカーの .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 に答える