Ris*_*sho 6 c# asp.net webforms
我有两个带有onclick事件处理程序的按钮,用于处理grid views页面上两个的信息.每个gv一个按钮.它们位于彼此之上,嵌套在html表结构中.
这些按钮用于将grid日期导出到Excel文档中(请参阅下面的代码)
顶部按钮,grid当click按钮工作正常,但底部的按钮将引发ThreadAbortException: Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.
我自然而然就是Google-d,但其中一些最重要的结果是处理Response.Redirect()电话而不是电话Response.End().Forums.asp.net上的一个这样的帖子在同一个方法调用上有相同的错误,但解决方案是Response.Redirect()使用错误页面作为参数更改代码- 再次与我的内容无关.
在Microsoft Suport页面上的另一个搜索建议HttpContext.Current.ApplicationInstance.CompleteRequest()替换的解决方案Response.End().我试过这个,错误就消失了,Excel下载弹出也是如此.
所以我不知道从哪里开始.奇怪的是,相同的代码(较少的gridviewid)适用于一个而另一个.这是您的审核代码,我已经标记了错误发生的位置.我想也许我可以产生一个新线程 - 这会减轻这个问题吗?我从来没有做过multi-threaded应用程序,但我正在接受挑战.
<table>
<tr>
<td align="left">
<asp:Button ID="btnExport" runat="server" OnClick="btnExport_Click"
Text="Export" Visible="false" />
</td>
</tr>
<tr>
<td>
<asp:Panel runat="server" ID="pnl1" Visible="false">
<asp:GridView ID="gvCountTotalsCat" runat="server"
AutoGenerateColumns="false"
CellPadding="3" PageSize="25" BackColor="White" BorderColor="MidnightBlue"
BorderStyle="Groove" BorderWidth="1px" CssClass="TextCompact"
GridLines="Vertical"
OnRowDataBound="gridView_OnRowDataBound"
EmptyDataText="Your request has returned zero records">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:Label runat="server" ID="lblHeader" Text="Cat" />
</HeaderTemplate>
<ItemTemplate>
<asp:Literal ID="litWuc" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Cat Entries" HeaderText="Cat Entries" />
<asp:TemplateField>
<HeaderTemplate>
<asp:Label runat="server" ID="lblHeader" />
</HeaderTemplate>
<ItemTemplate>
<asp:Literal ID="litSum" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Panel>
</td>
</tr>
<tr>
<td align="left">
<asp:Button ID="btnExport1" runat="server" OnClick="btnExport_Click1"
Text="Export" Visible="false" />
</td>
</tr>
<tr>
<td>
<asp:Panel runat="server" ID="pnl2" Visible="false">
<asp:GridView ID="gvCountTotalsCat1" runat="server"
AutoGenerateColumns="false"
AllowPaging="false" CellPadding="3" PageSize="25" BackColor="White"
BorderColor="MidnightBlue" BorderStyle="Groove" BorderWidth="1px"
CssClass="TextCompact" GridLines="Vertical"
OnRowDataBound="gridView_OnRowDataBound"
EmptyDataText="Your request has returned zero records">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:Label runat="server" ID="lblHeaderWuc" Text="Wuc" />
</HeaderTemplate>
<ItemTemplate>
<asp:Literal ID="litWuc" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Wuc Entries" HeaderText="Wuc Entries" />
<asp:TemplateField>
<HeaderTemplate>
<asp:Label runat="server" ID="lblHeader" />
</HeaderTemplate>
<ItemTemplate>
<asp:Literal ID="litSum" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Panel>
</td>
</tr>
</table>
public void btnExport_Click(object sender, System.EventArgs e)
{
string attachment = string.Empty;
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
// Create a form to contain the grid
HtmlForm frm = new HtmlForm();
frm.Attributes["runat"] = "server";
attachment = "attachment; filename=gvCountTotalsCat_" + _selectedSite + ".xls";
gvCountTotalsCat.Parent.Controls.Add(frm);
frm.Controls.Add(gvCountTotalsCat);
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/ms-excel";
frm.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}
public void btnExport_Click1(object sender, System.EventArgs e)
{
string attachment = string.Empty;
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
Response.Clear();
Response.ClearHeaders();
// Create a form to contain the grid
HtmlForm frm = new HtmlForm();
frm.Attributes["runat"] = "server";
attachment = "attachment; filename=gvCountTotalsCat1_" + _selectedSite + ".xls";
gvCountTotalsCat1.Parent.Controls.Add(frm);
frm.Controls.Add(gvCountTotalsCat1);
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/ms-excel";
frm.RenderControl(htw);
Response.Write(sw.ToString());
try
{
>> Error thrown here >> Response.End();
}
catch (System.Threading.ThreadAbortException lException)
{
lException;
}
}
Run Code Online (Sandbox Code Playgroud)
它破灭了我有一个网格和按钮在一个Update Panel,只有顶部按钮被设置为PostBackTrigger.在我添加第二个<asp:PostBackTrigger ControlID="btnExport1" />并解决问题之后.
| 归档时间: |
|
| 查看次数: |
82499 次 |
| 最近记录: |