Прежде всего, я новичок в Ajax и не совсем понимаю, как это работает в Asp.Net.
Я использую Asp.Net 3.5, и у меня есть серверный код на c #, который запускается, и когда он завершает свою работу, он вызывает событие с подпиской, которое записывает результат в элемент управления txtbox.
c # код:
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 код:
<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>
Что я делаю не так? Если я иду в отладку, я замечаю, что мой метод dbManager1_LoadDBCompleted является вызовом, но он не обновляет текстовое поле ...
РЕДАКТИРОВАТЬ: я обновляю код, чтобы быть более реалистичным и понятным.
РЕДАКТИРОВАТЬ 2: Если есть способ сделать это без использования UpdatePanel, пожалуйста, дайте мне знать, как.