2012-04-02 11 views
3

Ok, also habe ich ein wenig gesucht, aber ich finde nicht genau das, wonach ich suche. Ich bin ziemlich neu in ASP.NET, aber nicht in C#. Ich musste eine Seite erstellen, um eine reguläre Web-Service-Anfrage zu bearbeiten, um einen Web-Shop mit Daten von einem Web-basierten Buchhaltungs-Software-Service zu aktualisieren. Das Problem, das ich habe, ist, dass ich die Seite zuerst laden muss, dann führe das Update aus, sonst bricht die Seite ab und die Aktualisierung schlägt fehl. Die Anzeigeseite hat nur ein paar Etiketten, und das ist alles, was ich brauche, da die Seite sich so oft aktualisiert und das Update ausführt. Ich brauche jedoch die Update-Methode, um die Ergebnisse auf den Bildschirm zu bringen. Ich habe kein Problem, das Update zu starten, nur um sicherzustellen, dass die Ergebnisse angezeigt werden. Ich habe keine Tasten, die gedrückt werden, es werden keine Formulare verwendet.Aktualisieren von ASP.NET Label nach Abschluss der Aufgabe

Hier ist meine Seite Code:

<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="MainContent"> 
<div class="pageHeader"> 
    <div class="caption"> 
     <h1><asp:Localize ID="Caption" runat="server" Text="Update of Order Status From NetSuite Into AbleCommerce"></asp:Localize></h1> 
    </div> 
</div> 
<div> 
     <asp:Label ID="Label0" runat="server"></asp:Label> 
     <br /><br /> 
     <asp:Label ID="Label1" runat="server"></asp:Label> 
     <br /><br /> 
     <asp:Label ID="Label2" runat="server"></asp:Label> 
     <br /><br /> 
     <asp:Label ID="Label3" runat="server"></asp:Label> 
</div> 
</asp:Content> 



Und hier ist mein zurück Code:

public partial class Template_Default : CommerceBuilder.Web.UI.AbleCommercePage 
{ 
    private void PerformUpdate(object State) 
    { 
     Store _Store = StoreDataSource.Load(1); 
     Token.Instance.InitStoreContext(_Store); 
     String results = PontoonUpdate.soUpdate(); // method that performs the updates 
     Label3.Text = "Update Completed. " + String.Format("{0:MM-dd-yyyy hh:mm:ss}", DateTime.Now + "\n\n" + results); 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     Label0.Text = "Update start time: " + String.Format("{0:MM-dd-yyyy hh:mm:ss}", DateTime.Now); 
     Label1.Text = "Order updates will begin."; 
     Label2.Text = "Processing..."; 
     if(!Page.IsPostBack) 
      System.Threading.ThreadPool.QueueUserWorkItem(PerformUpdate); 
    } 
} 

Ich weiß, ich bin etwas fehlt, und ich weiß es zu meinen Mangel fällig Erfahrung mit ASP.NET. Wenn jemand irgendwelche Hinweise hat, würde ich sehr dankbar sein.


Ok, ich fand die Antwort auf das, was ich tun wollte. Ich war auf der Suche nach etwas anderem und fanden diese ...

http://www.simple-talk.com/dotnet/asp.net/implementing-waiting-pages-in-asp.net/

+3

Sie müssen etwas über AJAX lernen. ASP.NET funktioniert einfach nicht so, wie Sie es denken. –

+2

@JohnSaunders: Glaubst du AJAX ist das Problem hier? Es sieht so aus, als ob er nur eine Callback-Methode benötigt, um das Label zu setzen, wenn der Thread fertig ist. –

+0

@JamesJohnson: Sie können keine Rückrufmethode wie diese in ASP.NET haben. Es würde aufgerufen, nachdem die Seite die Verarbeitung abgeschlossen hatte und nicht mehr existierte. Er will die Seite, die darauf wartet, dass der Thread beendet wird, nicht aufhalten: Er möchte die Anzeige im Browser aktualisieren, nachdem die Seite fertig ist, und dann, nachdem der Thread abgeschlossen ist. –

Antwort

1

wickeln Sie Ihre Kontrollen in einem Update. Es ist AJAX eines armen Mannes. Platzieren Sie Ihre Steuerelemente (oder Ihre gesamte Seite) in die Inhaltsvorlage. Dann sagen Sie im Abschnitt Auslöser, welche Steuerelemente überwacht werden sollen und welche Ereignisse erfasst werden sollen. Es wird den Rest erledigen. In Ihrem Fall brauchen Sie von hier aus nur eine Art von Ereignis auszulösen. Es könnte ein Javascript sein, um eine Schaltfläche onLoad oder sogar das Bindungsereignis eines anderen Steuerelements auszulösen. Es ist nicht wirklich wichtig.

<asp:UpdatePanel runat="server" ID="update"> 
    <ContentTemplate> 
     <div class="pageHeader"> 
      <div class="caption"> 
       <h1><asp:Localize ID="Caption" runat="server" Text="Update of Order Status From NetSuite Into AbleCommerce"></asp:Localize></h1> 
      </div> 
     </div> 
     <div> 
       <asp:Label ID="Label0" runat="server"></asp:Label> 
       <br /><br /> 
       <asp:Label ID="Label1" runat="server"></asp:Label> 
       <br /><br /> 
       <asp:Label ID="Label2" runat="server"></asp:Label> 
       <br /><br /> 
       <asp:Label ID="Label3" runat="server"></asp:Label> 
     </div> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="generate" EventName="Click" /> 
    </Triggers> 
</asp:UpdatePanel>