Установщики HyperLink.NavigateUrl
и a.href
используют Control.ResolveClientUrl()
для определения абсолютного пути для относительного пути.
Control.ResolveUrl()
, с другой стороны, использует исходный виртуальный каталог текущего шаблона (который is / aPage) для построения абсолютного пути.
Таким образом, когда путь запроса /pages/apage.aspx
перезаписывается в /apage/
, и в результате выполняется следующий код:
/aPage/default.aspx
<div>
<asp:HyperLink ID="asp_hyperlink_to_default_aspx" runat="server">
asp_hyperlink_to_default_aspx
</asp:HyperLink><br />
<asp:HyperLink ID="asp_hyperlink_to_resolve_client_url_default_aspx" runat="server">
asp_hyperlink_to_resolve_client_url_default_aspx
</asp:HyperLink><br />
<asp:HyperLink ID="asp_hyperlink_to_resolve_url_default_aspx" runat="server">
asp_hyperlink_to_resolve_url_default_aspx
</asp:HyperLink><br />
</div>
/ aPage / default.aspx.cs:
<code> Response.Write("<pre>");
Response.Write("ResolveClientUrl(\"Default.aspx\") = " + ResolveClientUrl("Default.aspx") + "<br/>");
Response.Write("ResolveUrl(\"Default.aspx\") = " + ResolveUrl("Default.aspx") + "<br/>");
Response.Write("<br/>");
Response.Write("Request.RawUrl = " + Request.RawUrl + "<br/>");
Response.Write("Request.Url.AbsolutePath = " + Request.Url.AbsolutePath + "<br/>");
Response.Write("Request.AppRelativeCurrentExecutionFilePath = " + Request.AppRelativeCurrentExecutionFilePath + "<br/>");
asp_hyperlink_to_default_aspx.NavigateUrl = "Default.aspx";
asp_hyperlink_to_resolve_client_url_default_aspx.NavigateUrl = ResolveClientUrl("Default.aspx");
asp_hyperlink_to_resolve_url_default_aspx.NavigateUrl = ResolveUrl("Default.aspx");
Response.Write("
");
Сгенерирован следующий вывод:
ResolveClientUrl("Default.aspx") = Default.aspx
ResolveUrl("Default.aspx") = /aPage/Default.aspx
Request.RawUrl = /pages/apage.aspx
Request.Url.AbsolutePath = /aPage/default.aspx
Request.AppRelativeCurrentExecutionFilePath = ~/aPage/default.aspx
<div>
<a id="ContentPlaceHolder1_asp_hyperlink_to_default_aspx" href="Default.aspx">
asp_hyperlink_to_default_aspx
</a><br />
<a id="ContentPlaceHolder1_asp_hyperlink_to_resolve_client_url_default_aspx" href="Default.aspx">
asp_hyperlink_to_resolve_client_url_default_aspx
</a><br />
<a id="ContentPlaceHolder1_asp_hyperlink_to_resolve_url_default_aspx" href="/aPage/Default.aspx">
asp_hyperlink_to_resolve_url_default_aspx
</a><br />
</div>
Поэтому, чтобы быть в безопасности, лучше всего использовать ResolveUrl (), чтобы установить свойства NavigationUrl
и href
HyperLink и A. соответственно.
Надеюсь, это помогает.
Удачи.