Обновить элемент управления без панели обновления с помощью ASP.NET AJAX - PullRequest
1 голос
/ 19 ноября 2008

Этот вопрос напрямую связан с моим предыдущим вопросом ASP.NET AJAX

Возможно ли выполнить пост обратно асинхронно? У меня есть несколько элементов управления CustomTextbox на странице, когда я отправляю назад, я хочу обновить другой элемент управления в форме.

Если после первого сообщения я помещу все элементы управления на панель средства обновления в процесс, выполнение которого занимает пару секунд, любые изменения, внесенные мной в другие элементы управления, отображаются с их исходными значениями.

Есть идеи, как это исправить?

Type.registerNamespace('Demo');

Demo.CustomTextBox = function(element) {
    Demo.CustomTextBox.initializeBase(this, [element]);
}

Demo.CustomTextBox.prototype = {

    initialize: function() {
        Demo.CustomTextBox.callBaseMethod(this, 'initialize');

        this._onblurHandler = Function.createDelegate(this, this._onBlur);

        $addHandlers(this.get_element(),
                     {
                         'blur': this._onBlur
                     },
                     this);
    },

    dispose: function() {
        $clearHandlers(this.get_element());

        Demo.CustomTextBox.callBaseMethod(this, 'dispose');
    },

    _onBlur: function(e) {
    if (this.get_element() && !this.get_element().disabled) {
            /* Cridit to AdamB for this line of code */
            __doPostBack(this.get_element().id, 0);
        }
    }
}

Demo.CustomTextBox.registerClass('Demo.CustomTextBox', Sys.UI.Control);

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

1 Ответ

2 голосов
/ 19 ноября 2008

Расположите панель обновления только вокруг элемента управления, который необходимо обновить, и создайте элементы управления, которые запускают изменения на этой панели обновления:

<asp:TextBox runat="server" ID="Entry2" />
<asp:TextBox runat="server" ID="Entry1" />
<asp:UpdatePanel>
    <ContentTemplate>
        <asp:TextBox runat="server" ID="Result" ReadOnly="true" />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Entry1" />
        <asp:AsyncPostBackTrigger ControlID="Entry2" />
    </Triggers>
</asp:UpdatePanel>

В результате, когда завершается обратная передача, изменяется только содержимое внутри панели обновления. AJAX отправляет обратно значения всех элементов управления на странице, а не только элементы в шаблоне содержимого.

Вариант 2 (и более сложный) состоит в том, чтобы написать веб-сервис, который выполняет вычисления, и некоторый JavaScript для его вызова.

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