Этот вопрос напрямую связан с моим предыдущим вопросом 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();





Поместите панель обновления только вокруг элемента управления, который необходимо обновить, и сделайте элементы управления, запускающие изменения, срабатывают на этой панели обновления:
<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 для ее вызова.
Ура, Роберт, я подумал, что это может быть так.