Всплывающее окно Gridview не открывается из события RowCommand, соответствующего нажатию кнопки Link
У меня есть Linkbutton в поле шаблона Gridview. Я хочу перенаправить на другую страницу во всплывающем окне нестандартного размера из события RowCommand.
Примечание: здесь я не хочу вызывать свойство OnClientScript LinkButton для открытия всплывающего окна нестандартного размера. Я хочу сохранить Gridrow в объекте Session и открыть окно только из кода на стороне сервера.
Вот код:
<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("<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);
}
}
Приведенный выше код не открывает ни одного окна.
1 ответ
Решение
Вы не хотите использовать 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());
}
}