提问人:deadbug 提问时间:9/29/2008 最后编辑:Csharpdeadbug 更新时间:7/5/2018 访问量:2618
GetCallbackEventReference 不同步工作
GetCallbackEventReference doesn't work synchronously
问:
我有一个利用框架 Page.ClientScript.GetCallbackEventReference() 方法的 ASP.NET 3.5 WebForm,我希望一些调用是同步的。
现在,文档说第 5 个参数(见下文)控制了这一点。具体来说,当你传递 'false' 时,它应该是一个非异步调用。但是,无论它是 true 还是 false,它仍会异步处理调用。
Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context",false);
是否有解决方法,或者我做错了什么?
答:
1赞
Javal Patel
5/3/2013
#1
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> </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
0赞
Shaun
7/5/2018
#2
对于仍在使用 MS AJAX 库的任何其他可怜的灵魂,我找到了以下帖子:
来自MS消息来源的最后一条评论说:
这实际上是设计使然。为了不阻塞浏览器的 UI,此参数实际上不会同步执行请求,而是确保请求已排队,并且在任何给定时间只有一个请求在进行。效果几乎相同,只是最终用户仍然可以在请求进行时使用浏览器 UI,如果服务器无法响应或网络连接断开,他不必终止进程。
MSDN 页面证实了这一点:
在回调场景下同步发送数据时,同步回调会立即返回,不会阻塞浏览器。在浏览器中,不能同时执行两个同步回调回调。如果第二个同步回调在当前挂起时触发,则第二个同步回调将取消第一个同步回调,并且只有第二个回调将返回。
评论