Откройте asp LinkButton в новой вкладке

У меня есть кнопка в моем представлении сетки, и когда пользователи нажимают на нее, она переходит на страницу. Однако, если вы щелкнете по нему правой кнопкой мыши и «откроете ссылку в новой вкладке», она перейдет на пустую страницу. Я хочу, чтобы, когда пользователь щелкнул по нему правой кнопкой мыши и «открыл ссылку в новой вкладке», чтобы перейти на страницу. Это код, который у меня есть до сих пор:

aspx

 <asp:LinkButton ID="lnkEditbtn" data-toggle="tooltip" title="View Request" OnClick="lnkEditbtn_Click" runat="server" class="btn btn-primary btn-sm" Text="<%# bind('ticketID')%>"></asp:LinkButton>    

c#

protected void lnkEditbtn_Click(object sender, EventArgs e)
{
    GridViewRow gvr = (GridViewRow)(((Control)sender).NamingContainer);
    Label lblid = (Label)gvr.FindControl("lblMovie");
    int id = Convert.ToInt32(lblid.Text.ToString());
    SecureQueryString qs = new SecureQueryString();
    qs["ID"] = id.ToString();
    Response.Redirect("viewMovie.aspx?qs=" + qs.ToString());
}

person Charles Xavier    schedule 21.04.2017    source источник


Ответы (2)


вы не можете сделать это с помощью linkbutton, потому что это redirects к нужному виду после того, как вы нажмете на него, но вы можете использовать asp:HyperLink и установить его значение, например

<asp:HyperLink ID="lnkEditbtn" data-toggle="tooltip" Text="View Request"  runat="server" NavigateUrl='<%# Eval("ticketID", "~/viewMovie.aspx?qs={0}")  %>' class="btn btn-primary btn-sm" ></asp:HyperLink > 

Изменить

если вы хотите, чтобы URL-адрес был зашифрован, сначала создайте класс

 public static class encrypt
    {
        public static string encvalue(int id)
        {
            SecureQueryString qs = new SecureQueryString();
            qs["ID"] = id.ToString();
            return  qs.ToString()
        }
    }

и ваша гиперссылка будет

<asp:HyperLink ID="lnkEditbtn" data-toggle="tooltip" Text="View Request"  runat="server" NavigateUrl='<%# String.Format("~/viewMovie.aspx?qs={0}",encrypt.encvalue(Convert.ToInt32(Eval("ticketID"))))  %>' class="btn btn-primary btn-sm" ></asp:HyperLink > 
person Usman    schedule 21.04.2017
comment
Кажется, это работает! Но как зашифровать URL-адрес прямо сейчас, он показывает номер фильма, например, 123, а не qs=IFIYPQFIEhU%3d. У меня есть onclick (проверьте исходный код): SecureQueryString qs = new SecureQueryString(); qs[ID] = id.ToString(); Response.Redirect(viewMovie.aspx.aspx?qs= + qs.ToString()); - person Charles Xavier; 24.04.2017
comment
Предполагается перейти к aspx?qs=IFIYPQFIEhU%3d, а не .aspx?qs=261 - person Charles Xavier; 24.04.2017
comment
@ParbhuBissessar, можете ли вы сказать, какую библиотеку вы используете для SecureQueryString? - person Usman; 24.04.2017
comment
посмотрите, поможет ли это использовать System.Collections.Specialized; использование System.Security.Cryptography; - person Charles Xavier; 24.04.2017
comment
Теперь он говорит мне, что имя «id» не существует в текущем. contextqs[ID] = id.ToString(); Я попытался вернуть GridViewRow grv (как в приведенном выше коде), но он говорит: имя «отправитель» не существует в текущем контексте. - person Charles Xavier; 24.04.2017
comment
@ParbhuBissessar, мой плохой, просто измените имя параметра со значения на идентификатор в классе, который я обновил в своем коде. - person Usman; 24.04.2017

Кнопка ссылки на стороне сервера отображается как гиперссылка на стороне клиента с «href» как href="javascript:__doPostBack('lnkEditbtn',''), что является не чем иным, как обратной передачей на сервер с кнопки ссылки. Поэтому, когда вы щелкаете правой кнопкой мыши и открываете ссылку в новой вкладке, она отправляется на сервер и, следовательно, появляется как пустая страница в новой вкладке.

Что вы можете сделать, так это использовать код, аналогичный приведенному ниже коду:

<style>
    .hide {
        display:none;
    }
</style>
<script>        
    function postBack() {
        __doPostBack('lnkEditbtn', '');
        return false;
    }
</script>

<asp:LinkButton ID="lnkEditbtn" runat="server" OnClick="lnkEditbtn_Click" Text="Link" CssClass="hide"></asp:LinkButton>
<a href="http://www.google.com" onclick="return postBack();">Link</a>



protected void lnkEditbtn_Click(object sender, EventArgs e)
{
   var linkButton = (Control)sender as LinkButton;
}

С помощью этого кода вы скрываете кнопку ссылки и вместо этого используете тег Anchor. Href в теге Anchor будет вызываться при щелчке правой кнопкой мыши. И когда вы щелкнете по ссылке, будет запущен метод JS "postBack", который вызывает обработчик событий на стороне сервера для кнопки ссылки.
И здесь работает как правый, так и левый щелчок.

person Boney    schedule 21.04.2017
comment
Я не хочу, чтобы ссылка вела на google.com, но хочу, чтобы она вела на страницу, например: viewMovie.aspx?qs= - person Charles Xavier; 21.04.2017
comment
Ссылка генерируется со страницы С# и не является фиксированной ссылкой. - person Charles Xavier; 22.04.2017
comment
хорошо тебя понял. Сможете ли вы обработать значение Href до того, как страница отобразится на стороне клиента ИЛИ есть ли шанс, что значение Href изменится из-за взаимодействия с клиентом? Если это первый случай, то LinkButton как таковой вам не нужен. Используйте гиперссылку, установите Href на стороне сервера до отображения страницы, и гиперссылка будет реагировать на щелчок и щелчок правой кнопкой мыши. - person Boney; 22.04.2017