Криене на URL при посочване с мишката на asp:HyperLink

+6 гласа
11,765 прегледа
попитан 2016 април 21 в .NET от Nikoleta.V. (4,090 точки)

Виждал съм javascript:void(0) метод използван върху <a> тагове в HTML за криене на целевия URL на обекта с връзката. Искам да направя същото върху <asp:HyperLink>, как да стане? 

Пиша на ASP.NET: 

<asp:HyperLink runat="server" ID="hl1">бла бла бла</asp:HyperLink> 

Отзад в кода направих NavigateUrl за hl1 да използва метода HttpUtility.UrlDecode. 

Опитах с hl1.Attributes[href]="javascript:void(0)", но не работи. Не мога да отворя NavigateUrl повече. 

1 отговор

+1 глас
отговорени 2016 април 22 от valeri.hristov (7,340 точки)
избран 2016 април 27 от Nikoleta.V.
 
Най-добър отговор

Трябва да съхраниш url-a, който искаш да посочиш в скрито поле и просто да зададеш NavigateUrl = "#"(долу съм показал). По този начин когато потребителят посочи линка, реалния URL няма да се покаже в дъното на браузъра.

След това закачи click event handler-а от страната на клиена за хиперлинка като направиш onlick атрибута да сочи към JavaScript функия,наречена navigate. Реалното пренасочване в нова страница става в тази функция.

В тази ситуация, ще виждаш само URL-а на текущата страница + #. Например,ако текущия URL е http://localhost/mysite/view.aspx , то ще се покаже http://localhost/mysite/view.aspx# в дъното на браузъра.

Какво ти трябва:

<asp:HyperLink runat="server" ID="hl" NavigateUrl="#"

           onclick="navigate();">Some Text</asp:HyperLink>

<asp:HiddenField ID="hdnURL" runat="server" Value="http://www.microsoft.com" />

 и малко JavaScript:

<script type="text/javascript">

        function navigate() {

            window.location.href = document.getElementById("<%=hdnURL.ClientID%>").value;

        }

</script>

Друг начин да го направиш е да пренастроиш NavigateURL на хиперлинка(долу съм показал). С този подход, трябва първо да премахнеш NavigateURL преди да се рендерира съдържанието и да го съхраниш в глобална променлива, наречена linkUrl. Event-a, който се пуска преди да се рендерира съдържанието е pageLoad и ще го използваш точно него.

Глобални променливи в JavaScript се дефинират винаги извън методи.

При натискане на хиперлинка, можеш да вземеш стойността от променливата linkUrl и да пренасочиш към това място.

<script type="text/javascript">

    function navigate(event) {

         window.location.href = linkURL;

    }

    var linkUrl = null;

    function pageLoad() {

        var link = document.getElementById("<%=hl.ClientID%>");

        linkURL = link.getAttribute("href");

        link.setAttribute("href","#");

    }

</script>

...