c# asp.net  vs2008
第一种方式
page_load下
  m_ADFCallbackFunctionString = Page.ClientScript.GetCallbackEventReference(this, "message",
           "processCallbackResult", "context", "postBackError", true);
        }        public void RaiseCallbackEvent(string eventargs)
        {
            // 将传入参数依据&分割符分到querystring变量中
            Array keyValuePairs = eventargs.Split("&".ToCharArray());
            NameValueCollection queryString = new NameValueCollection();
            string[] keyValue;
            string response = "";
            if (keyValuePairs.Length > 0)
            {
                for (int i = 0; i < keyValuePairs.Length; i++)
                {
                    keyValue = keyValuePairs.GetValue(i).ToString().Split("=".ToCharArray());
                    queryString.Add(keyValue[0], keyValue[1]);
                }
            }
            else
            {
                keyValue = eventargs.Split("=".ToCharArray());
                if (keyValue.Length > 0)
                    queryString.Add(keyValue[0], keyValue[1]);
            }
            // 是否进行缓存,对于属性查询图形不进行缓存
            bool needCached = true;
            // 针对参数中指定的ActiveType不同执行不同操作
            string Condtion = queryString["Condtion"];
            string eventArg = queryString["EventArg"];
后面是arcgis操作省略   public string GetCallbackResult()
        {
            return m_ADFCallbackFunctionString;
        }
总结这个方式是 pageload 下定义  m_ADFCallbackFunctionString = Page.ClientScript.GetCallbackEventReference(this, "message",
           "processCallbackResult", "context", "postBackError", true);
    之后2个void  public void RaiseCallbackEvent(string eventargs)
public string GetCallbackResult()  经过测试是可用的
第二种方式  环境任然是vs2008 asp.net c#
pageload 下定义
a1 = Page.ClientScript.GetCallbackEventReference(this,
            "message", "processCallbackResult", "context", "postBackError", true);a2 = Page.ClientScript.GetCallbackEventReference(this,
            "message", "processCallbackResult", "context", "postBackError", true);a3 = Page.ClientScript.GetCallbackEventReference(this,
            "message", "processCallbackResult", "context", "postBackError", true);
private string  callbackArg
    string ICallbackEventHandler.GetCallbackResult()
    {
        // 判断是否有相应的缓存信息
        string cachedResponse = Cache[callbackArg] as string;
        if (cachedResponse != null)
        {
            return cachedResponse;
        }
        // 将传入参数依据&分割符分到querystring变量中
        Array keyValuePairs = callbackArg.Split("&".ToCharArray());
        NameValueCollection queryString = new NameValueCollection();
        string[] keyValue;
        string response = "";
        if (keyValuePairs.Length > 0)
        {
            for (int i = 0; i < keyValuePairs.Length; i++)
            {
                keyValue = keyValuePairs.GetValue(i).ToString().Split("=".ToCharArray());
                queryString.Add(keyValue[0], keyValue[1]);
            }
        }
        else
        {
            keyValue = callbackArg.Split("=".ToCharArray());
            if (keyValue.Length > 0)
                queryString.Add(keyValue[0], keyValue[1]);
        }
        // 是否进行缓存,对于属性查询图形不进行缓存
        bool needCached = true;
        // 针对参数中指定的ActiveType不同执行不同操作
      
        string controlType = queryString["ActiveType"];
        string eventArg = queryString["EventArg"];
        switch (controlType)
        {
            case "GetResourceContent":
                response = GisFunctionality.GetResourceContent(Map1);
                break;
            case "ShowFieldInfo":
                response = GisFunctionality.ShowFieldInfo(Map1, eventArg);                
                break;
            case "AttributeQuery":
                response = GisFunctionality.AttributeQuery(Map1, eventArg, queryString["Condtion"]);
                needCached = false;
                break;
            default:
                break;
        }
        if (needCached)
        {
            TimeSpan cacheDuration = new TimeSpan(0, 0, 999999);
            Cache.Add(callbackArg, response, null,
                DateTime.Now.Add(cacheDuration),
                System.Web.Caching.Cache.NoSlidingExpiration,
                System.Web.Caching.CacheItemPriority.NotRemovable, null);
        }
        return response;
    }
    void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
    {
        callbackArg = eventArgument;
    }
这个是pageload 下定义
之后2个完成函数 加private string  callbackArg。   单独测试也是可用的 。问题 是 这2个方法有什么区别 (第2中用的是ICallbackEventHandler 我把2种方法合在一起。 (2个人写的代码集成)
4个函数设置断点发现ICallbackEventHandler.GetCallbackResult 
ICallbackEventHandler.RaiseCallbackEvent
是优先于第1种的2个void)问题 
1  2种办法区别
2  如何把第1种的2个函数 法放入第2种函数 

解决方案 »

  1.   

    楼上有什么更好的方法??  可以通过POST传值  ?/ 你的意思改变m_ADFCallbackFunctionString = Page.ClientScript.GetCallbackEventReference(this, "message",
      "processCallbackResult", "context", "postBackError", true);
    ?/
    另外晚上我对比 public partial class _Default : System.Web.UI.Page, ICallbackEventHandler2个aspx.cs都继承ICallbackEventHandler
    但第1个
      public string GetCallbackResult()
      {
      return m_ADFCallbackFunctionString;
      } public void RaiseCallbackEvent(string eventargs)
      {
      // 将传入参数依据&分割符分到querystring变量中
    }后面是arcgis操作省略第2个
    private string CallBackValue = string.Empty;
     2    
     3 string ICallbackEventHandler.GetCallbackResult()
     4 {这里实现复杂的取值
     5  return CallBackValue + ",ok";
     6 }
     7
     8 void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
     9 {
    10  this.CallBackValue = eventArgument;
    11 }
    对比发现2种方法方向相反?????最后有疑问
     // 判断是否有相应的缓存信息
      string cachedResponse = Cache[callbackArg] as string;
      if (cachedResponse != null)
      {
      return cachedResponse;
      }
      // 将传入参数依据&分割符分到querystring变量中
      Array keyValuePairs = callbackArg.Split("&".ToCharArray());
    这些代码 Cache[callbackArg] 是在代码或者配置什么地方定义的?