3

場合によってはjqueryポップアップを表示するように変更したいハイパーリンクがありますが、マスターページで実行すると奇妙な問題が発生します。以下は通常のページで機能します。

hyp1.NavigateUrl = "#notificationPopup";

次のようにレンダリングされます:

<a id="ctl00_hyp1" href="#notificationPopup">Example</a>

これはまさに私が欲しいものです。問題は、レンダリングするマスターページのハイパーリンクにあるコードとまったく同じコードにあります。

<a id="ctl00_hyp1" href="../MasterPages/#notificationPopup">Example</a>

マスターページで設定しているときに、ResolveClientUrl()などを介してnavigateUrlを実行しているようです。をに交換しようとしまし<asp:hyperlink<a href runat=serverが、同じことが起こります。

何か案は?

4

4 に答える 4

1

MSDNControl.ResolveClientUrlメソッドの説明に関する注記があります。

このメソッドによって返されるURLは、コントロールがインスタンス化されるソースファイルを含むフォルダーに関連しています。UserControlやMasterPageなど、このプロパティを継承するコントロールは、コントロールに関連する完全修飾URLを返します。

したがって、例のマスターページの動作は完全に予測可能です(ただし、これは操作があまり快適ではありません)。では、代替案は何ですか?

最良の方法は<a>、をクライアントコントロールとして設定することです(削除runat="server")。マスターページでも魅力のように機能するはずです:

<a href="#notificationPopup">Example</a>

このコントロールをサーバー側のみにする必要がある場合:UriBuilderクラスを使用して、コードビハインドからURLを作成できます。

UriBuilder newPath = new UriBuilder(Request.Url);
// this will add a #notificationPopup fragment to the current URL
newPath.Fragment = "notificationPopup";
hyp1.HRef = newPath.Uri.ToString();
于 2011-03-08T14:46:47.220 に答える
0

フォームに非表示フィールドを作成し、ハイパーリンクのナビゲートURLではなく、ナビゲートする場所/ハイパーリンクのURLに値を設定します。次に、JavaScriptでハイパーリンクのonclickメソッドを呼び出し、ブラウザが実際のナビゲーションを行う前に、そこにハイパーリンクを設定します。

<html><head><title></title></head>
<script type="text/javascript">

function navHyperlink(field)
{
field.href = document.getElementById('ctl00_hdnHypNav').value;
return true;
}

</script>
<input type="hidden" id="hdnHypNav" value="test2.html" runat="server"/>
    <a href="" onclick="navHyperlink(this);" >click here</a>
</html>

背後にあるコードは次のようになります。hdnHypNav.value="#notificationPopup";

ポストバックの後にURLを以下のコードで設定してみることもできます。つまり、行の後ろのコードをこれに置き換えますが、それが機能するかどうかはわかりません...

ScriptManager.RegisterStartupScript(this,this.GetType(),"SetHyp","$('ctl00_hyp1').href = '#notificationPopup';",True)
于 2011-03-08T11:34:20.617 に答える
0

私は問題を解決する別の方法を見つけました。

hyp1.Attributes.Add("href", "#notificationPopup");
于 2016-01-21T02:34:53.080 に答える
0

静的ハイパーリンクをrunat="server"1つに置き換えた理由は、リソースベースの自動ローカリゼーションの恩恵を受けるためでしたが、これらの回答はどれも私のニーズに応えませんでした。

私の修正は、ハイパーリンクをリテラルで囲むことでした。

<asp:Literal ID="lit1" runat="server" meta:resourcekey="lit1">
  <a href="#notificationPopup">Example</a>
</asp:Literal>

欠点は、プログラムでリンクを操作する必要がある場合、もう少し面倒です。

lit1.Text = String.Format("<a href=\"{0}\">Example</a>", HttpUtility.HtmlAttributeEncode(url));
于 2022-02-23T15:39:38.350 に答える