2008-09-29 56 views
1

我有一个ASP.NET 3.5的WebForm,利用框架Page.ClientScript.GetCallbackEventReference()方法,我希望一些调用是同步的。现在GetCallbackEventReference不能同步工作

,该文件说,第五个参数(见下文)控制这一点。具体来说,当你通过“假”它应该是一个非异步调用。然而,不管它是真的还是假的,但它仍然异步处理呼叫。

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

是否有解决此问题的方法或者我做错了什么?

回答

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>&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