为什么AsyncFileUpload在gridview上触发RowCommand事件?

时间:2012-03-12 10:54:34

标签: c# asp.net events postback asyncfileupload

我在互联网上搜索了差不多2天才找到解决方案,但还没有任何效果。

我在页面上有2个用户控件。首先包含AsyncFileUpload:

 <cc1:AsyncFileUpload runat="server" ID="fuExcelUploader" Width="400px" 
                                UploadingBackColor="#CCFFFF" ThrobberID="myThrobber" 
                                CompleteBackColor="#CEF6CE" />

并且第二个具有带有下载按钮(excel文件)的模板字段的网格视图

    <asp:TemplateField HeaderText="Report with errors" ItemStyle-HorizontalAlign="Center">
                        <ItemTemplate>
                                  <asp:LinkButton id="lbError"   CommandName="ErrorClick" runat="server"  CommandArgument='<%# Eval("Report.Id") %>'  ValidationGroup="other2357"><asp:Image ID="imgReport" runat="server"  
ImageUrl="~/App_Themes/Default/Images/icons/page_excel.png" ImageAlign="Middle"   Visible='<%# Convert.ToInt32(Eval("Report.Id")) > 0 %>' /></asp:LinkButton>

                         </ItemTemplate>
                    </asp:TemplateField>

在RowCommand中如果e.CommandName = ErrorClicked我有这样的代码用于下载文件

Response.Clear();
                Response.Buffer = true;
                Response.AddHeader(
                    "Content-Disposition", string.Format("attachment; filename={0}", "Error_report_" + this.ErrorClicked + ".xlsx"));
                HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats";
               // Response.Cache.SetCacheability(HttpCacheability.Private);
                Response.BinaryWrite(value); //value is byte[];
                Response.End();

它完美无缺我可以使用asyncfileupload上传文件,然后点击gridview等上的图标下载报告,但是有一个问题。

每当我点击gridview上的下载图标时,弹出下载文件对话框,我可以保存/打开/取消但无论我做什么,在我尝试使用asyncfileupload上传新文件后,同样的RowCommand事件被触发同样的'ErrorClick 'CommandName和CommandArgument,所以我得到那个窗口,文件再次下载(页面被锁定)。可能是因为linkbutton和asyncfileupload都没有刷新整个页面(它是否与回发相同?)。

您是否知道为什么在使用asyncfileupload控件上传期间触发rowcommand或如何解决该问题。在这种情况下我不使用udpatepanels。

1 个答案:

答案 0 :(得分:-1)


单击“链接”按钮并处理上载后会触发OnRowComand事件。注册两次下载代码会出错。
LinkBut​​ton中“href”的脚本以某种方式影响了这个结果。我使用ImageButton来触发下载,使用LinkBut​​ton来执行ImageButton的事件点击。

ASPX

ImageButton - &gt; Style =“display:none;”


ASPX.CS - RowDataBound

LinkButton.Attributes.Add("OnClick", "$(document.getElementById('" + ImageButton.ClientID + "')).click(); return false;");
抱歉,我的英语太可怕了。我使用谷歌翻译。