2016-03-18 15 views
0

私は絶対的なリンクが使用されるはずのマスターページで相対リンクの使用方法を修正する方法についてかなりの情報を見つけましたが、相対リンクが望ましい時期はまだありません。マスターページを使用しているページを基準にして解決するには、ASP.NETマスターページ内のリンクをどのように作成できますか?

次のように私が直面してる状況は次のとおりです。
私は、クエリ文字列でのルートディレクトリ内のページ(SelectItem.aspx)にリンクして私のマスターページでのナビゲーションバー、として機能DataListコントロールを持っています。私は同じ名前のページを保持するAdminというディレクトリを作成しました。

私は、次の動作を実装したいと思います:私は/OtherPage.aspxからナビゲーションバーのリンクをクリックすると
、私は/SelectItem.aspxに取られるべきです。
/Admin/OtherPage.aspxからnavbarリンクをクリックすると、/Admin/SelectItem.aspxに移動する必要があります。
動作は、マスタページの場所に関係なく一貫している必要があります。

私の現在の実装では、ディレクトリ/MasterPages/にマスターページがあり、その結果、アクセスされているページのディレクトリではなく、そのディレクトリに対してすべての相対リンクが解決されます。

答えて

1

これは悪いアイデアだと思いますが、あなたはマスターのAppRelativeTemplateSourceDirectoryプロパティを変更することでそれを行うことができます。

protected override void OnPreRender(EventArgs e) 
{ 
    base.OnPreRender(e); 
    AppRelativeTemplateSourceDirectory = Page.AppRelativeTemplateSourceDirectory; 
} 

マスターページ上の任意の相対リンクは、その後のではなく、コンテンツページに対する解決されますマスター。

+0

、これは潜在的にマイナスの影響は何を引き起こす可能性が? – grandta13

+0

@ grandta13:マスターページからのすべての相対リンクは、代わりにコンテンツページに対して解決されます。他のすべてのリンクがapp-relativeまたはabsoluteの場合、それはOKであるはずです。しかし、いずれかがマスターに相対的である場合、彼らは壊れます。 –

+0

@ grandta13:ユーザーコントロールでナビゲーションバーを切り離し、そのコードをそのコントロールに適用する方が安全かもしれません。 –

0

例:

this.Page.ResolveClientUrl("~/path/to/some/page.aspx") 

ResolveClientUrl method

+0

あなたの答えを編集して、これがどのように質問に答えるか説明してください。 –

+0

私はそれがもっとはっきりしていないと思った。あなたは何を混同していますか? –

+0

詳細はこちら( 'ResolveClientUrl'メソッドについて):https://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveclienturl(v=vs.110).aspx –

関連する問題