Почему asp: HyperLink.NagigateUrl в пользовательском элементе управления, помещенном в подпапку, содержит эту подпапку? - PullRequest
0 голосов
/ 03 февраля 2010

~/Folder1/UserControl1.ascx:

<%@ Control Language="C#" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.WebUserControl1" %>
<asp:HyperLink runat="server" NavigateUrl="?foo=bar">HyperLink1</asp:HyperLink>

~/UserControl2.ascx:

<%@ Control Language="C#"CodeBehind="WebUserControl2.ascx.cs" Inherits="WebApplication1.WebUserControl2" %>
<asp:HyperLink runat="server" NavigateUrl="?foo=bar">HyperLink2</asp:HyperLink>

Результат:

http://localhost/Folder1/?foo=bar

http://localhost/?foo=bar

Почему это происходит?

Ответы [ 2 ]

2 голосов
/ 03 февраля 2010

Ссылки разрешены относительно каталога пользовательского элемента управления, они на самом деле вызывают ResolveClientUrl(); внутри, так что вы видите такое же поведение.

Описание от MSDN:

URL-адрес, возвращаемый этим методом, относится к папке, содержащей исходный файл, в котором создается элемент управления. Элементы управления, которые наследуют это свойство, такие как UserControl и MasterPage, будут возвращать полный URL-адрес относительно элемента управления.

Устранение URL-адресов с Page.ResolveClientUrl() в коде позади решит проблему.

2 голосов
/ 03 февраля 2010

Если у вас нет / или ~ в начале пути, оно считается относительно текущей позиции.

Из пользовательского элемента управления текущая позиция - это позиция элемента управления.

...