Gridview 弹出窗口 window 未从对应于 Linkbutton 单击的 RowCommand 事件打开

Gridview popup window not opening from RowCommand event corresponding to Linkbutton click

我在 Gridview TemplateField 中有 Linkbutton。 我想从 RowCommand 事件重定向到弹出自定义大小 window 中的另一个页面。

注意:这里我不想调用LinkBut​​ton的OnClientScript属性来openJavascript Popup Custom SizeWindow。我想将 Gridrow 保存到 Session 对象中并仅从服务器端代码打开 window。

代码如下:

<ItemTemplate>
    <itemstyle width="5%" />
    <asp:LinkButton CssClass="l_link" ID="lnkView" runat="server"  
      DataTextField="overWriteType" 
      CommandName="overWriteType"
      CommandArgument='<%# Eval("overWriteType") %>'
      Text='<%# Eval("overWriteType") %>'></asp:LinkButton>
</ItemTemplate>
protected void gvKeys_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "overWriteType")
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        sb.Append("&lt;script language='javascript'>");
        sb.Append("window.open('OverwriteConfiguration.aspx', 'PopUp',");
        sb.Append("'top=0, left=0, width=500, height=500, menubar=no,toolbar=no,status,resizable=yes,addressbar=no');<");
        sb.Append("/script>");
        ScriptManager.RegisterStartupScript(Page, GetType(), "OpenWindow", sb.ToString(), true);
    }
}

以上代码没有打开任何window。

在这种情况下你不想使用 RegisterStartupScript,你想为你的按钮添加一个 onclick 处理程序并且你想在 RowDataBound 中执行它:

protected void gvKeys_RowDataBound(object sender, GridViewRowEventArgs e)
{

  if (e.Row.RowType == DataControlRowType.DataRow)
  {

    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append("window.open('OverwriteConfiguration.aspx', 'PopUp',");
    sb.Append("'top=0, left=0, width=500, height=500, menubar=no,toolbar=no,status,resizable=yes,addressbar=no');<");

    LinkButton l = (LinkButton)e.Row.FindControl("lnkView");

    l.Attributes.Add("onclick", sb.ToString());

   }

}