Nicht in der Lage zu bewerten Ausdruck, da der code optimiert ist, oder einen einheitlichen Rahmen ist oben auf dem Aufruf-stack
Habe ich zwei buttons mit onclick
event-Handler, die Informationen verarbeiten, die aus zwei grid views
auf der Seite. Eine Schaltfläche für jeden gv. Diese befinden sich übereinander geschachtelt in einer html
Tabelle Struktur.
Sind die Schaltflächen zum export der grid
Datum in ein Excel
Dokument (siehe code unten)
Den oberen Knopf und grid
wenn click
auf die Taste funktioniert gut, aber die Schaltfläche unten, wirft einen ThreadAbortException: Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.
Natürlich habe ich Google-d aber einige von den top-Ergebnissen wurden der Umgang mit Response.Redirect()
Anrufe eher als Response.End()
. Ein solcher post an Forums.asp.net den gleichen Fehler hat, auf die gleiche Methode aufrufen, aber die Lösung war, dass sich der code Response.Redirect()
mit einem Fehler-Seite als parameter - wieder nicht mit dem was ich habe.
Anderen Suche bei Microsoft Suport Seite eine Lösung vorschlagen, wo HttpContext.Current.ApplicationInstance.CompleteRequest()
ersetzt Response.End()
. Ich habe dies ausprobiert, der Fehler geht Weg, und so ist die Excel-download-popup.
So, ich weiß nicht, wohin Sie gehen von hier aus. Was ist komisch ist, dass der gleiche code (weniger gridview
- id) arbeitet für eine, sondern die andere. Hier ist der code für dein review und ich habe markiert, wo der Fehler geworfen wird.
Ich dachte, vielleicht könnte ich spawn einen neuen thread - wäre das lindern das Problem? Ich habe noch nie getan eine multi-threaded
app, aber ich bin für eine Herausforderung.
<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;
}
}
Außerdem, warum müssen Sie erstellen ein Formular, um zu halten die Gitter? Einfach nur neugierig.
Der zweite Knopf schlägt fehl, selbst wenn ich es auf vor dem ersten. Kann auf der Seite "sitzen" gibt es für eine Weile - egal wie lange. Ich bin mir nicht sicher, ob ich verstehe deine zweite Frage über die Notwendigkeit eines Formulars. der code wurde gegeben, um mich zu übernehmen, funktioniert es in andere Seiten, ausgenommen hier.
Differentialdiagnose Zeit. Wenn Sie ändern Sie den code für die zweite Schaltfläche exportieren, so dass es machte die erste Netz eher als die zweite, verursacht den gleichen Fehler? (Da gibt es keinen offensichtlichen Unterschied im code Frage ich mich, ob der Unterschied liegt in dem, was gerendert wird. Zumindest dies wird uns ausschließen.)
Auch Stelle ich fest, dass beide Netze anrufen
gridView_OnRowDataBound
. Ist das absichtlich? Nur Kontrolle.
InformationsquelleAutor Risho | 2013-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es runenverzierte aus, dass ich beide Netze und Schaltflächen in einer
Update Panel
und nur der oberste Knopf war alsPostBackTrigger
. Nachdem ich fügte der zweite<asp:PostBackTrigger ControlID="btnExport1" />
und das problem lösen.InformationsquelleAutor Risho
Es ist ein praktischer Weg, um mit "Nicht in der Lage zu bewerten Ausdruck, da der code optimiert ist, oder einen einheitlichen Rahmen ist oben auf dem Aufruf-stack." Probleme. Sie schreiben zu müssen-auf der Ausgabe-Fenster.
Beurteilung mit System.Diagnostik;
Fügen Sie einen Try/Catch für die Zeile, die erroring
In der Catch-fügen Sie diese Zeilen
Nur Debuggen und überprüfen Sie die Ausgabe-Fenster
Hoffe, es hilft.
InformationsquelleAutor Santhosh
Behoben werden können, mit einer
ASPxGridViewExporter
ohne eineThreadAbortException
.Versuchen Sie den folgenden code-snippet:
Lädt die excel-Datei, ohne eine
ThreadAbortException
mit der Meldung:ohne immer folgende Fehlermeldung beim öffnen der excel-Datei:
Hoffe, es hilft! 🙂
InformationsquelleAutor ChocapicSz