onRowCommand在刷新页面时再次被触发

时间:2009-10-09 08:15:39

标签: asp.net

在我的网页中,我有一个gridview,其中包含下载文件的链接和单独页面中打开另一个网站的链接。当我点击链接gridview onRowCommand执行并且网站在单独的窗口中打开。之后我刷新了网页,gridview onRowCommand再次执行并再次在单独的窗口中打开网站,我不想要。我希望当我点击链接导航到另一个网站然后它应该去。我的意思是页面刷新,gridview onRowCommand应该不被执行。

我正在使用Page.RegisterStartupScript在单独的窗口中打开另一个网站。

ASP.net 2.0

感谢

-------------------------------------------代码--- -------------

protected void grdDisplayView_onRowCommand(object sender,GridViewCommandEventArgs e)     {          string path = e.CommandArgument.ToString();

        if (path.Contains("http"))
        {
            StringBuilder sbString = new StringBuilder("<script language='javascript'>");
            sbString.Append("window.open('");
            sbString.Append("http://www.yahoo.com','', 'status=no,width=600,height=500,toolbar=yes,menubar=yes,location=yes,scrollbars=yes,resizable=yes,titlebar=yes,top=198,left=305');");
            sbString.Append("</script>");

            if ((!Page.ClientScript.IsStartupScriptRegistered("clientScriptExportView")))
            {
                Page.RegisterStartupScript("clientScriptExportView",sbString.ToString());
            }

        }
        else
        {
            //download file which is locally
            path = Server.MapPath(path);
            System.IO.FileInfo file = new System.IO.FileInfo(path);

                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());
                HttpContext.Current.Response.ContentType = "Application/octet-stream";
                HttpContext.Current.Response.WriteFile(file.FullName);
                HttpContext.Current.Response.End();


        }

    }

2 个答案:

答案 0 :(得分:1)

如果用户单击刷新按钮,则将再次发送先前请求中发送的任何信息。也就是说,如果用户点击按钮,并且如果他按下刷新按钮,则按钮点击动作将被重新发送到服务器。

我认为没有简单的方法来区分原始按钮点击和通过页面刷新发送的按钮点击。

这是一个经典问题,可以使用发布/重定向/获取模式解决(以一种不那么简单的方式)。请参阅here(wiki)/ here

我不确定这是否能解决您的问题,但希望能让您走上正轨!希望它有所帮助!

请参阅this SO帖子,其中介绍了如何在ASP.NET Web窗体中实现该模式。

答案 1 :(得分:0)

也许这不是你想要的,但我应该使用:

  <a href="new page" target="_blank" >text</a>
gridview itemtemplate

中的

这可以确保执行后没有代码:) 但我不知道这是不是你想要的

您可以在 ondataitembound 事件

中创建链接

如果您需要后面的代码,您也可以使用dataitembound事件将javascript添加到例如图像按钮以启动新页面并获得onclick事件的代码:

 imagebutton.Attributes.Add("onclick", "window.open('otherpage.aspx?courseid=" + id+ "')")