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;
    }
}
In dem Szenario, wo die zweite Schaltfläche fehl, gehen Sie auf die zweite Taste Los, sobald die Seite geladen wird, oder erst nach Klick auf den ersten Knopf?
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

Schreibe einen Kommentar