GetCallbackEventReference не работает синхронно

У меня есть веб-форма ASP.NET 3.5, которая использует метод фреймворка Page.ClientScript.GetCallbackEventReference (), и я бы хотел, чтобы некоторые из вызовов были синхронными.

В документации сказано, что этим управляет 5-й параметр (см. Ниже). В частности, когда вы передаете false, это должен быть неасинхронный вызов. Однако независимо от того, истинно это или ложно, он по-прежнему обрабатывает вызов асинхронно.

Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context",false);

Есть ли способ обойти это или, возможно, я что-то делаю не так?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
2 457
2

Ответы 2

Страница ASPX

<%@ Page Language = "VB" AutoEventWireup = "false" CodeFile = "How-to-use-GetCallbackEventReference.aspx.vb" Inherits = "How_to_use_Callback" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns = "http://www.w3.org/1999/xhtml">
<head runat = "server">
    <title>How to use GetCallbackEventReference</title>
        <script type = "text/javascript">
            function GetNumber() {
                UseCallback();
            }
            function GetRandomNumberFromServer(txtGetNumber, context) {
                document.forms[0].txtGetNumber.value = txtGetNumber
            }
        </script>
</head>
<body>
    <form id = "form1" runat = "server">
    <div>
        <input id = "Button1" type = "button" value = "Get Random Number" onclick = "GetNumber()" /><br /><br />
        <asp:TextBox ID = "txtGetNumber" runat = "server"></asp:TextBox>&nbsp;</div>
    </form>
</body>
</html>

Код позади

Partial Class How_to_use_Callback
    Inherits System.Web.UI.Page
    Implements System.Web.UI.ICallbackEventHandler
    Dim CallbackResult As String = Nothing
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim cbReference As String = Page.ClientScript.GetCallbackEventReference(Me, "arg", "GetRandomNumberFromServer", "context")
        Dim cbScript As String = "function UseCallback(arg,context)" & "{" & cbReference & " ; " & "}"
        Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "UseCallback", cbScript, True)
    End Sub

    Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
        Return CallbackResult
    End Function

    Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
        CallbackResult = Rnd().ToString()
    End Sub
End Class

Для других бедняков, все еще использующих библиотеку MS AJAX, я нашел следующий пост:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/f4134c2e-ca04-423a-9da3-c613713a7b52/synchronous-callbacks-with-the-net-20-framework?forum=netfxjscript

Последний комментарий источника MS гласит:

This is actually by design. In order not to block the UI of the browser, this parameter doesn't actually do the request synchronously but makes sure the requests are queued and only one is going on at any given time. The effect is pretty much the same, except that the end-user can still use the browser UI while the request is going on and he won't have to kill the process if the server fails to respond or the network connection falls.

Страница MSDN подтверждает это:

When sending data synchronously in a callback scenario, synchronous callbacks return immediately and do not block the browser. No two synchronous callbacks callback can execute at the same time in the browser. If a second synchronous callback is fired while one is currently pending, the second synchronous callback cancels the first and only the second callback will return.

Другие вопросы по теме