0

我有一个方法可以添加一个 onclick 事件和一个 imagebutton。但有时您必须在“弹出”窗口打开之前多次按下按钮。知道为什么会这样吗?

这是我的代码,如果我将事件添加到我的图像按钮:

private void AddProjectDetails()
    {
        ImageButton imgBtn;
        HiddenField hfld;
        String ProjectNumber;
        for (int i = 0; i < GridViewProperties.Rows.Count; i++)
        {
            hfld = GridViewProperties.Rows[i].FindControl("HiddenProjId") as HiddenField;
            imgBtn = GridViewProperties.Rows[i].FindControl("ibtnShowExtra") as ImageButton;
            ProjectNumber = hfld.Value;
            imgBtn.Attributes.Add("onclick", "window.open('ProjectDetails.aspx?ProjectNumber=" + Server.UrlEncode(ProjectNumber) + "','Graph','height=590,width=600,left=50,top=50,scrollbars=yes'); return true;");
        }
    }
4

3 回答 3

1

尝试从 javascript 返回 false 。这将防止回发。有时回发可能比 windows.open 更快,在这种情况下,我认为您不需要它。

另一种解决方案是使用 an<a href='...' >image</a>而不是 imagebutton

于 2013-04-02T12:02:35.133 回答
0

你为什么return true在你的java脚本函数中使用。
您是否需要在您的页面上回发。
如果不使用return false.

我还建议你编写一个javascript函数并按如下方式调用它

function OpenPopUp(projectNumber) 
{
      window.open("ProjectDetails.aspx?ProjectNumber="+ projectNumber 
                      ,'Graph','height=590,width=600,left=50,top=50,scrollbars=yes'); 
      return false;
};

并在您的 c# 代码中调用它

imgBtn.Attributes.Add("onclick", "return OpenPopUp('"+Server.UrlEncode(ProjectNumber)+"');");
于 2013-04-02T12:22:06.087 回答
0

就像 Stefano 和 Shekhar 所说的那样,您不能对 LinkBut​​tons、Imagebuttons 使用 return true,除非您希望页面回发。

你也可以这样使用:

<asp:ImageButton ID="ButtonOpenProject" runat="server" ImageUrl="~/Images/OpenProject.png"  OnClientClick="return OpenProject('"<%# ProjectNumber %>"');" />

在您的 JavaScript 脚本中,您可以执行以下操作:

function OpenProject(ProjectNumber){
    window.open('ProjectDetails.aspx?ProjectNumber=' + ProjectNumber + ','Graph','height=590,width=600,left=50,top=50,scrollbars=yes');
    return false;
}

希望这有帮助。

于 2013-04-02T13:08:57.563 回答