2009-03-07 11 views
0

Erstens, ich bin neu bei Ajax und ich verstehe nicht alles, wie es in Asp.Net funktioniert.Asp.Net C# -> Javascript Ajax

Ich benutze Asp.Net 3.5 und ich habe einen C# Server-Code, der ausgeführt wird und wenn es fertig ist, ist es ein abonniertes Ereignis aufzurufen, das das Ergebnis in ein Txtbox-Steuerelement schreibt.

C# -Code:

public partial class TestDBLoader : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     dbManager1.LoadDBCompleted += new DBManager.AsyncLoadDBDelegate(dbManager1_LoadDBCompleted); 
     dbManager1.LoadDBAsync(sender, e, null); 
    } 

    public void dbManager1_LoadDBCompleted(object sender, EventArgs e) 
    { 
     txtResult.Text = "Finish!"; 
     updatePanel.Update(); 
    } 
} 

public partial class DBManager : System.Web.UI.UserControl 
{ 
    public AsyncLoadDBDelegate asyncLoadDB; 
    public delegate void AsyncLoadDBDelegate(object sender, EventArgs e); 
    public event AsyncLoadDBDelegate LoadDBCompleted; 

    private void StartLoad(object sender, EventArgs e) 
    { 
     // Not the true code, only an example ... 
     for (int i = 0; i <= 10; i++) 
     { 
      Thread.Sleep(1000); 
     } 

     LoadDBCompleted(sender, e); 
    } 

    public IAsyncResult LoadDBAsync(object sender, EventArgs e, AsyncCallback callback) 
    { 
     IAsyncResult asyncResult; 

     asyncLoadDB = new AsyncLoadDBDelegate(StartLoad); 

     asyncResult = asyncLoadDB.BeginInvoke(sender, e, callback, null); 

     return asyncResult; 
    } 
} 

Asp Code:

<asp:ScriptManager ID="ScriptManager" runat="server" /> 
<asp:UpdatePanel ID="updatePanel" runat="server" UpdateMode="Conditional"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="dbManager1" EventName="LoadDBCompleted" /> 
    </Triggers> 
    <ContentTemplate> 
     <uc:DBManager ID="dbManager1" runat="server" /> 
     <asp:TextBox ID="txtResult" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Was mache ich falsch? Wenn ich in debug gehe, merke ich, dass meine Methode dbManager1_LoadDBCompleted Anruf ist, aber es aktualisiert nicht die Textbox ...

EDIT: Ich aktualisiere den Code, um realistischer und verständlicher zu sein.

EDIT2: Wenn es eine Möglichkeit gibt, dies zu tun, ohne das UpdatePanel zu benutzen, lass es mich bitte wissen wie.

Antwort

0

Es ist sehr wahrscheinlich, dass die Update-Methode des UpdatePanels nicht ausgelöst wird, weshalb sich der Inhalt nicht ändert.

Sie müssen die Kontrolle entweder sicherzustellen, die WorkFinished innerhalb der Update des Content auszuführen verursacht ist, fügen Sie die ID der Steuerung an die als AsynchronousPostbackTrigger Sammlung Trigger WorkFinished Anrufen oder UpdatePanel.Update(); bis zum Ende des WorkFinished des Körpers, wodurch der Update hinzufügen sich neu zu laden.

Seien Sie vorsichtig mit Update aber können sie aufgrund ihrer Natur sehr leistungsintensiv sein, etwas, das ich hier bedeckt - http://www.aaron-powell.com/blog/august-2008/optimising-updatepanels.aspx

+0

Ich bearbeite meine Nachricht mit Ihrer Empfehlung, aber es funktioniert immer noch nicht – Melursus

1

die ID Ihrer Textbox ist txtbox1 aber Sie txtbox.text setzen ...

+0

ich es in meinem Beitrag zu korrigieren, war es ein Fehler, wenn ich/kopieren fügen Sie diesen – Melursus

0

Denkt bitte halten, dass dies technisch nicht „AJAX“ ist. Ein updatepanel sagt im Grunde nur "sende mir den HTML-Code, der an dieser Stelle nach einem Postback eingeht", was ziemlich nett sein kann.

Sie müssen wahrscheinlich auch mehr Code teilen, um dies zu diagnostizieren. Was brennt WorkFinished?

+0

I Bearbeiten Sie meine Nachricht mit mehr Code – Melursus