Asp.Net c # -> Javascript Ajax - PullRequest
       16

Asp.Net c # -> Javascript Ajax

0 голосов
/ 07 марта 2009

Прежде всего, я новичок в 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, пожалуйста, дайте мне знать, как.

Ответы [ 3 ]

1 голос
/ 07 марта 2009

идентификатор вашего текстового поля - txtbox1, но вы устанавливаете txtbox.text ...

0 голосов
/ 08 марта 2009

Скорее всего, метод UpdatePanel не запускается, поэтому его содержимое не изменяется.

Вам нужно либо убедиться, что элемент управления, вызывающий выполнение WorkFinished, находится внутри ContentTemplate элемента UpdatePanel, добавить идентификатор элемента управления, вызывающего WorkFinished, в коллекцию Triggers как AsynchronousPostbackTrigger, либо добавить UpdatePanel.Update(); в конец тела WorkFinished, заставив UpdatePanel для перезагрузки.

Будьте осторожны с UpdatePanels, хотя они могут быть очень ресурсоемкими из-за их природы, о чем я говорил здесь - http://www.aaron -powell.com / blog / august-2008 / optimizing-updatepanels.aspx

0 голосов
/ 08 марта 2009

Пожалуйста, имейте в виду, что это технически не "AJAX". Панель обновлений просто говорит: «Пришлите мне HTML-код, который появляется в этом месте после обратной передачи», что может быть довольно болтливым.

Кроме того, вам, вероятно, нужно поделиться большим кодом, чтобы помочь диагностировать это. Что такое увольнение WorkFinished?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...