asp.net LinkButton OnClick не запускается с помощью href

#asp.net #onclick #href #linkbutton

#asp.net #onclick #href #linkbutton

Вопрос:

У меня есть LinkButton, он работает действительно хорошо, но когда я добавляю href в LinkButton, он перенаправляет меня на ссылку без запуска функции OnClick.

 <asp:LinkButton target="_blank" ID="ad_main_form"  
    OnClick="ad_button_Click" runat="server"  
    CssClass="ad_main_panel" CausesValidation="False" 
    href="https://stackoverflow.com">
</asp:LinkButton>
  

Как запустить OnClick и href вместе?

Комментарии:

1. Вы можете покинуть страницу или нет, я не думаю, что вы можете сделать и то, и другое.

2. Сделайте это: удалите href, загрузите страницу в браузере и> просмотреть исходный код, чтобы увидеть, что происходит с linkbutton. Затем добавьте PostBackUrl и перезагрузите браузер и> снова просмотрите исходный код.

3. @Jamal в этом нет никакого смысла, я хочу позволить пользователю открывать ссылку с помощью href. И отслеживайте, сколько раз пользователь нажимает на эту ссылку (тег привязки) в серверной части. Response.redirect() работает, но я не хочу делать это со стороны сервера, я хочу открыть ссылку на стороне клиента и отслеживать клики на стороне сервера

4. @Drust-Taib, основываясь на ваших разъяснениях, смотрите Мой ответ ниже; Поскольку нет href, вам нужно использовать OnClientClick(), как показано ниже. Работает ли это для вас?

Ответ №1:

LinkButton имеет свойство с именем, PostbackUrl вместо этого используя href , пожалуйста, используйте это свойство.

Чтобы избежать всех этих хлопот, что я бы сделал, это вызвал Response.Redirect('url') внутри моего обработчика щелчков, чтобы он выполнял обе работы более чистым способом.

Обновить
К сожалению, вы не можете открыть новую вкладку с помощью Response.Redirect() метода, но вы, безусловно, можете написать javascript код для открытия URL-адреса на новой вкладке. Смотрите:

 Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "openurl", "window.open('http://www.mywebsite.com' ,'_blank');", true);
  

В качестве альтернативы, вы можете просто сделать это следующим образом:

 Response.Write("<script>window.open('http://www.mywebsite.com', '_blank')</script>");
  

Комментарии:

1. @DrustTaib Я думаю, что вы разместили пустой комментарий.

2. @Джамшид Камаран извините за комментарий, это была случайность. У меня есть две проблемы 1- response.redirect() делает то же самое, но response.redirect() находится на стороне сервера. Я хочу сделать это со стороны клиента. 2- Я хочу открыть ссылку на новой вкладке браузера, можем ли мы сделать это с помощью response.redirect()?

3. @DrustTaib Пожалуйста, обратитесь к обновлению в моем ответе.

4. @Джамшид Камаран Спасибо вам за ваш ответ. Я знаю, что это работает, но то, что я на самом деле ищу, — это открыть ссылку на стороне клиента, а не на стороне сервера.

5. @DrustTaib window.open — это метод на стороне клиента, вы просто вводите javascript на свою страницу с помощью сервера, и это потому, что сервер запускается в любом случае, поэтому все в порядке, если вы открываете ссылку через сервер.

Ответ №2:

asp: LinkButton не имеет тега href.

Вам нужен OnClick для серверной части и OnClientClick для клиентской части

  <asp:LinkButton ID="ad_main_form"
            runat="server"
            OnClick="ad_button_Click"
            OnClientClick="javascript: window.open('https://stackoverflow.com');">
            Click me
 </asp:LinkButton>
  

Код C #, лежащий в основе:

  protected void ad_button_Click(object sender, EventArgs e)
    {
        // your code
    }
       
  

Вы также можете обработать это таким образом и предоставить пользовательскую функцию JavaScript для OnClientClick(). Смотрите функцию навигации (URL). Исходный код остается неизменным.

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="YourProject.WebForm1" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<script type="text/javascript">
    function Navigate(url) {         
        javascript: window.open(url);
    }
</script>  

<body>
  <form id="form1" runat="server">
    <div>
        <asp:LinkButton ID="ad_main_form"
            runat="server"
            OnClick="ad_button_Click"
            OnClientClick="Navigate('https://stackoverflow.com')" 
            CausesValidation="False">
            Click me
        </asp:LinkButton>
    </div>
  </form>    
</body>
  

Код был протестирован и работает нормально!