我用 ASP.NET 2.0 高级编程的例子,做回调测试学习。结果回调没有反应。
    我在 PAGE 里面回了 EnableEventValidation="false" 也没有反应。
            if (Page.Request.Browser.SupportsXmlHttp == true)
        {
            Response.Write("cbReference");
        }
     用上面语句测试也为真。
     请高手们指教。谢谢!    下面附上 ASP.NET 2.0 高级编程的例子 源码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="RandomNumber.aspx.cs" Inherits="RandomNumber" %><!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 id="Head1" runat="server">
    <title>Callback Page</title>
    
    <script type="text/javascript">
        function GetNumber(){     
            UseCallback();
        }
        
        function GetRandomNumberFromServer(TextBox1, context){   
            document.forms[0].TextBox1.value = TextBox1;
        }
    </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="TextBox1" Runat="server"></asp:TextBox>
    </div>
    </form>
</body>
</html>后台:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class RandomNumber : System.Web.UI.Page, 
   System.Web.UI.ICallbackEventHandler
{
    private string _callbackResult = null;    protected void Page_Load(object sender, EventArgs e)
    {
        string cbReference = Page.ClientScript.GetCallbackEventReference(this, 
           "arg", "GetRandomNumberFromServer", "context");
        string cbScript = "function UseCallback(arg, context)" +
           "{" + cbReference + ";" + "}";        Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
           "UseCallback", cbScript, true);
    }    public void RaiseCallbackEvent(string eventArg)
    {
        Random rnd = new Random();
        _callbackResult = rnd.Next().ToString();
    }    public string GetCallbackResult()
    {
        return _callbackResult;
    }
}

解决方案 »

  1.   

    没有仔细看代码。我想你看得那本书应该是经过出版社挑选的,还是有点实际应用的依据的,我先估计它没有什么问题。这时候,你要判断是否回调“有反应”,应该在“public void RaiseCallbackEvent(string eventArg)”这句话上设置断点来查看它是否执行,已经传来的参数是什么,当这个正确,然后在“return _callbackResult”上设置断点查看返回什么,以及在“function GetRandomNumberFromServer(TextBox1, context){”上设置断点(需要允许vs调试javascript,如果你的断点不能中断,也可以在这个{号后边写上“asdfadff”它就会中断,并且你仍然可以接下来跳过“asdfadff”继续执行不受影响)查看TextBox1的值是否与_callbackResult完全一致。
      

  2.   

    http://blog.csdn.net/veryhappy/archive/2006/06/02/769176.aspx
      

  3.   

    《ASP.NET 2.0 高级编程》是红皮书翻译版,其它例子的源码都能运行的。   我测试了,就是
       public void RaiseCallbackEvent(string eventArg)
       没有执行。
       也就是没有激活回调事件。
      
       感觉是 javascript     UseCallback(); 没有执行。
       UseCallback(); 是在服务器定义的 javascript 函数。
       应该也没有问题呀。   谢谢高手指教!!
      

  4.   

    你可以把页面的客户端源代码令存为一个html文件,然后单独用vs来调试这个html。从代码来看,点击按钮应该通过GetNumber来调用UseCallback,虽然参数没有提供(javascript允许这样调用),仍然应该调用RegisterClientScriptBlock写出的那个UseCallback函数。或者先把代码改一下:
       string cbScript = "function UseCallback(arg, context)" +
               "{ alert('执行到这里应该可以执行客户端回调。');" + 
               cbReference + ";" + "}";
      

  5.   

    其实作者的程序写的有点不像asp.net的面向对象原本的精准代码。在asp.net2.0下,可以直接写:<input id="Button1" runat="server" type="button" value="Get Random Number" />protected void Page_Load(object sender, EventArgs e)
        {
            this.Button1.Attributes["onclick"]=
               Page.ClientScript.GetCallbackEventReference(this, 
               "arg", "GetRandomNumberFromServer", "context");
        }少绕javascript的弯子,直接对控件办事。
      

  6.   

    嗯?你的脚本执行的时候没有提示有错误吗?看上去arg、context这两个东西并没有在客户端定义(var)嘛。如此说来,这本书有点.....如果是脚本执行时报“object 'arg' undefined!”或者context为定义,可以先把它们改成javascript中的常量:    Page.ClientScript.GetCallbackEventReference(this, 
               "'arg'", "GetRandomNumberFromServer", "'context'");
      

  7.   

    看上去arg、context这两个东西并没有在客户端定义(var)嘛。如此说来,这本书有点.....
    他的这两个参数是作为UseCallback函数的参数提供的……
    也就是:string cbScript = "function UseCallback(arg, context)"
      

  8.   

    嗯,对!javascript不会有“object xxx undefined”的错误提示,直接用undefined作为arg和context的值。这个程序直接写:
        this.Button1.Attributes["onclick"]=
               Page.ClientScript.GetCallbackEventReference(this, 
               "''", "GetRandomNumberFromServer", "''");比较直接了当一些,一下子简单了,不绕javascript,比较可靠。
      

  9.   

    感谢楼上的朋友的指教,我查了一些资料,整理了一个比较简单的回调程序,我在机器上调试过的,希望对这方面有需要的朋友有所帮助。
       再次感谢楼上这么多朋友的指教。<%@ Page Language="C#" AutoEventWireup="true" CodeFile="002.aspx.cs" Inherits="test01_002" %><!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 id="Head1" runat="server">
        <title>无标题页</title>
    </head>
    <script type="text/javascript">
        function GetMessageFromServer() 
        {
        var arg="提交的值!";  //此处可以自己定义上传的参数
        var context="";
        <%= ClientScript.GetCallbackEventReference(this, "arg", "JSCallback", "context")%>;
        }
       function JSCallback(result, context)
        {
            // 当回调结束后将执行这里的方法,把从服务器端获取的值进行客户端操作
            document.forms[0].TextBox1.value = result;
        }
    </script><body>
        <form id="form1" runat="server">
        <div>
     <input type="button" id="Button1"  value="Get Message" onclick="GetMessageFromServer()"/><br />
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        
        </div>
        </form>
    </body>
    </html>
    后台代码:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class test01_002 : 
    System.Web.UI.Page, ICallbackEventHandler   {
        string callbackResult;
       protected void Page_Load(object sender, EventArgs e)
        {
        }
        public void RaiseCallbackEvent(string eventArgument)
        {
            // 服务器端操作
          callbackResult = "处理过的:" + eventArgument;
        }
        public string GetCallbackResult()    {
           return callbackResult;
        }
    }
      

  10.   

    MARK
    我也遇到同样的问题了
      

  11.   

    我的搜索引擎继7月份第二次开放测试后,现在进行第三次开放测试,请大家多批评指正。
    无为搜索引擎开始测试了啊
    (第三次开放测试啊)  网站运行后的效果请参见: 
    http://219.233.38.213/Search/WuWei.aspx
    代码下载地址 :http://www.ofile.cn/se.rar  
    前两次用 CGI+html做了一个版本还做了一个 Java版本 (这次比较忙,所以没来的及更新,有需要的跟我说一声啊)
    这次用 C# ASP.NET做一个 玩玩
    做的不好,请大家做指教啊!
    这次还实现了计算器功能啊
    可以搜索一下 sin(1+2) 看看 
    另外 sh=1&sf=1&ua=1&sa=1&st=1&wh=1&ph=1     把这里面的 1改成 0看看 每个部分都是可以控制的:)
    至于为什么要把客户端网站部分开源,请参考我第二次开放测试时即兴写的文章 :   最近我研究搜索引擎 七 (长长中国人的志气篇)  
    http://www.baidu.com/s?wd=%D7%EE%BD%FC%CE%D2%D1%D0%BE%BF%CB%D1%CB%F7%D2%FD%C7%E6%C6%DF&cl=3
    承盟广大网友看的起 该文目前已经被全国 2000多网站转载
    先说一下技术指标: 本次我收录了全国30多万个一、二级域名, 网页采集用了三周时间,目前已经采集了 12万网站,平均每个网站收录 30篇网页,索引进行了 10天,
    目前已经索引了 100多万网页 。 搜索核心部分采用这次采用 C  语言开发。 客户端提供三个版本一个CGI+HTML版本,一个 Java版本,一个 ASP.NET版本。代码下载地址 :http://www.ofile.cn/se.rar 
    搜索网站客户端(.NET版本)整体解决方案(源代码)
    (第三次开放测试啊)  网站运行后的效果请参见: 
    http://219.233.38.213/Search/WuWei.aspx
      

  12.   

    简单的问题 你生成网站就可以了 然后在IIS里面用 肯定没有问题的 我也遇到这个样的问题
      

  13.   

    UseCallback();这个要传递参数,而且是两个参数
      

  14.   

    function UseCallback(arg,context){WebForm_DoCallback('__Page',arg,GetRandomNumberFromServer,context,null,false);}