【问题标题】:Open asp LinkButton in a new tab在新选项卡中打开 asp LinkBut​​ton
【发布时间】:2017-04-21 17:59:21
【问题描述】:

我的网格视图中有一个按钮,当用户单击它时,它会转到页面。但是,如果您右键单击它并“在新选项卡中打开链接”,它会转到一个空白页面。我想要它,所以当用户右键单击它并“在新选项卡中打开链接”以转到该页面时。这是我到目前为止的代码:

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());
}

【问题讨论】:

    标签: c# asp.net asplinkbutton


    【解决方案1】:

    您不能使用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 > 
    

    【讨论】:

    • 这似乎可以胜任!但是您现在如何加密 URL,它会显示电影 ID 的编号,例如 123,而不是 qs=IFIYPQFIEhU%3d。我拥有的 onclick(检查原始代码): SecureQueryString qs = new SecureQueryString(); qs["ID"] = id.ToString(); Response.Redirect("viewMovie.aspx.aspx?qs=" + qs.ToString());
    • 假设去 aspx?qs=IFIYPQFIEhU%3d 而不是 .aspx?qs=261
    • @ParbhuBissessar 你能说出你使用哪个库来进行 SecureQueryString 吗?
    • 看看这是否有助于使用 System.Collections.Specialized;使用 System.Security.Cryptography;
    • @ParbhuBissessar 我的错误只是将参数名称从值更改为我在代码中更新的类中的 id
    【解决方案2】:

    服务器端的链接按钮被渲染到客户端的超链接,“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 标记。 右键单击时将调用 Anchor 标记中的 Href。当您单击链接时,将触发“postBack”JS 方法,该方法调用链接按钮的服务器端事件处理程序。
    并且通过右键单击和左键单击都可以工作。

    【讨论】:

    • 我不希望链接转到 google.com,但希望它转到页面,例如:viewMovie.aspx?qs=
    • 链接是c#页面生成的,不是固定链接
    • 好的。您是否能够在页面在客户端呈现之前处理 Href 值,或者 Href 的值是否有可能由于客户端交互而改变?如果是前一种情况,那么您不需要 LinkBut​​ton 本身。使用超链接,在页面渲染前在服务器端设置Href,超链接会响应点击和右键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2012-04-25
    相关资源
    最近更新 更多