asp:LinkBut​​ton代码在其他代码之后打开新的浏览器窗口/选项卡

时间:2010-10-27 08:48:23

标签: c# asp.net

对于我工作的内部网页,我根据SQL表中的条目显示DataGrid(不是直接,但对条目进行了一些处理)。

DataGrid中的每一行都有一个用户单击的按钮。我需要这个按钮来打开一个新的窗口或标签(我相信我无法决定,因为这是基于浏览器配置),并且还更改了SQL表中的值,表示单击了按钮。

如果我使用asp:Hyperlink,那么页面打开很好,但我不知道如何更新SQL。反之亦然如果我使用asp:LinkBut​​ton我可以更新SQL但无法打开新页面。

我想做的不可能吗?

由于

编辑:

我在我的.cs文件中尝试了这两种方法,但都没有用:

ClientScript.RegisterStartupScript(GetType(), "openwindow", "window.open('" + url + "','_preview'");

Response.Write("<script type='text/javascript'>detailedresults=window.open('" + url + "');</script>");

5 个答案:

答案 0 :(得分:2)

<asp:TemplateField HeaderText="Action"> <ItemTemplate>
<asp:LinkButton ID="lbtnConfigureSurvey" runat="server" CausesValidation="False"    
CommandName="ConfigureSurvey" CommandArgument='<%# Eval("intSurveyID") %>' 
OnClientClick="aspnetForm.target ='_blank';">                                        
</asp:LinkButton>
</ItemTemplate>                               
</asp:TemplateField>

protected void gvSurveyList_RowCommand(object sender, GridViewCommandEventArgs e)
{
 if (e.CommandName == "ConfigureSurvey")
{
  Response.Redirect('Your page url');
}
}

答案 1 :(得分:0)

试试这个

Response.Write("<script type='text/javascript'>detailedresults=window.open('PAGE NAME.aspx');</script>")

修改

您可以设置链接按钮的命令名称并在rowcocommand事件

中执行代码
 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("commandname for linkbutton"))
            {
                //update code 
                Response.Write("<SCRIPT language=\"javascript\">open('Yourpage.aspx','_blank','top=0,left=0,status=yes,resizable=yes,scrollbars=yes');</script>");

        }
    }

答案 2 :(得分:0)

您可以使用LinkBut​​ton并使用OnClientClick属性设置将在新浏览器窗口中打开页面的java脚本。此脚本必须返回true,以便可以进行回发,并且您可以在服务器端处理单击事件以更新数据库。

IMO,更好的方法是使用超链接并在新的浏览器窗口中打开页面。但是,您必须在打开页面(例如Page2)时传递一个查询字符串参数,该页面将告诉新页面它应该更新数据库。因此,打开页面的网址将类似于"page2.aspx?recordId=xyz"。在page2.aspx.cs中,您将拥有诸如

之类的代码
protected void page_load(object sender, EventArgs e)
{
   if (!IsPostback)
   {
      var recordId = Response.QueryString["recordId"];
      if (!string.IsNullOrEmpty(recordId))
      {
         // update database
         ...
      }
   }
   ...
}

从安全角度来看,您可能希望在参数值中包含超时并加密整个事物。

答案 3 :(得分:0)

您可以使用LinkBut​​ton并在回发时调用RegisterStartupScript以在页面加载时执行类似的操作

的.aspx:

<asp:LinkButton OnClick="OnButtonClick" Text="Update" runat="server" />

.aspx.cs:

protected void OnButtonClick(object sender, EventArgs e)
{
    ClientScript.RegisterStartupScript(GetType(), "openwindow", "<script type=text/javascript> window.open('About.aspx'); </script>");
}

您需要将整个脚本元素提供给RegisterStartupScript。

答案 4 :(得分:0)

Heperlink不会在点击时调用服务器端事件,所以你不会回复执行SQL任务,并且通过使用LinkBut​​ton你可以在新窗口或选项卡中打开页面来执行此操作 你需要在Grid_RowBoundEvent中添加下面的小代码 例如:LinkBut​​ton.OnClientClick =“window.open('http://www.google.com');”; 您可以根据自己的要求提及这个网址

再次在代码后面你将得到服务器端事件你可以做你的SQL任务。

希望对你有所帮助