7

私は ASP.NET Web フォーム Web サイトを維持しています(Web アプリケーションではなく Web サイトを意味します)が、仮想ディレクトリでホストされているため、静的リンクの一部が壊れています。

http://www.somewhere.com/MyApp

そこで、ページへの仮想パスを指定して絶対 URL を取得する方法を見つけるために、パスをたどり始めました。そして、次のようなリンクを取ることができると述べた記事を見つけました。

<a href="/ContactUs.aspx">Contact Us</a>

次のようにします。

<a href="<%= System.Web.VirtualPathUtility.ToAbsolute("/ContactUs.aspx") %>">Contact Us</a>

しかし、ローカル パスは次のようになる可能性があるため、ローカルで(つまり、ASP.NET 開発サーバーに対して)動作していません。

http://localhost:7766/MyApp

しかし、によって生成されるパスVirtualPathUtilityは次のとおりです。

http://localhost:7766/ContactUs.aspx

そこで、ローカルの IIS インスタンスにデプロイして、どのように動作するかを確認することにしました。そして結果は同じでした。ローカル IIS パスは次のとおりです。

http://localhost/MyApp

お問い合わせページへのパスは次のとおりです。

http://localhost/ContactUs.aspx

うまくやっていくための最後の問題として、アプリケーションには次のようなリンクが 1 つあります。

<asp:HyperLink id="ContactUsLink"
    runat="server"
    Enabled="true"
    NavigateUrl="/ContactUs.aspx"
    Text="Contact Us">
</asp:HyperLink>

そして、それがうまくいかないという理由は、(上記の例のような)インライン コードがサーバー コントロールでは機能しないことを知っているからです。実際にはコンパイラ エラーがスローされます。

サーバー タグに <% ... %> 構造を含めることはできません。


どうやら私は明らかに間違った道を進んでいるようで、助けが必要です。あなたの答えを楽しみにしています。

4

4 に答える 4

14

試す:

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
于 2013-03-12T12:30:22.857 に答える
2

アドレスの前に〜を付ける必要があります。したがって、任意のrunat =serverコントロールの「〜/Contact.aspx」。これは、標準のタグでは機能しません。runat = serverを通常のタグに追加して、サーバーコントロールにすることができます。

ランタイムは〜を認識し、実行しているものに関連してそれを作成します。

<asp:HyperLink id="ContactUsLink"
    runat="server"
    Enabled="true"
    NavigateUrl="~/ContactUs.aspx"
    Text="Contact Us">
</asp:HyperLink>
于 2013-03-12T12:33:42.623 に答える
2

URL を正しく解決する ~ を使用できるため、HyperLink コントロールは次のようになります。

<asp:HyperLink id="ContactUsLink"
    runat="server"
    Enabled="true"
    NavigateUrl="~/ContactUs.aspx"
    Text="Contact Us">
</asp:HyperLink>

~ 記号は常にアプリケーションのルート ディレクトリに解決され、仮想パスが考慮されます。上記の解決策は、サーバータグの必要性も取り除くため、問題を解決するはずです.

なんらかの理由で仮想ディレクトリ パス (つまり、URL の MyApp 部分) をコードで直接取得したい場合は、それを使用HttpContext.Current.Request.ApplicationPathして仮想パスを返すことができます。その後、それを使用して URL を取得できます。

于 2013-03-12T12:34:16.190 に答える
0
window.location.protocol + "/" +(window.location.host + "/" + window.location.pathname);
于 2015-01-06T06:13:22.340 に答える