专栏首页c#开发者asp.net回调javascript

asp.net回调javascript

using System; 
using System.Collections; 
using System.IO; 
using System.Text; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.ComponentModel; 
namespace Platform 
{ 
 
 
 /// <summary> 
 /// 可以处理客户端的jscript的回调 
 /// </summary> 
 [DefaultProperty(""), 
  ToolboxData("<{0}:ScriptCallbackManager runat=server></{0}:ScriptCallbackManager>")] 
 public class ScriptCallbackManager : System.Web.UI.WebControls.WebControl 
 { 
  private ICallbackEventHandler _handler; 
  private String _functionNameAfterCallback; 
        public ScriptCallbackManager() { 
            //_handler = (ICallbackEventHandler)Page; 
        }

        /// <summary> 
        /// 回调完执行的客户端函数 
        /// </summary> 
  public string FunctionNameAfterCallback 
  { 
   get { return _functionNameAfterCallback; } 
            set { _functionNameAfterCallback = value; } 
  } 
  public ICallbackEventHandler CallbackEventHandler 
  { 
   get { return _handler; } 
            set { _handler = value; } 
  }
  /// <summary> 
  /// 将此控件呈现给指定的输出参数。 
  /// </summary> 
  /// <param name="output"> 要写出到的 HTML 编写器 </param> 
  protected override void Render(HtmlTextWriter output) 
  { 
   output.Write(this.GetCallbackEventReference()); 
  } 
  protected override void OnInit(EventArgs e){ 
   base.OnInit(e); 
   try { 
    this.HandleRequest(); 
            } 
   catch (Exception ex){ 
                object o = ex; 
   } 
  } 
  private void HandleRequest(){ 
   HttpRequest request = this.Page.Request; 
   HttpResponse reponse = this.Page.Response; 
   String sType = request["type"]; 
   if ((sType != null) && (sType == "__scriptcallback:" + this.ID)) 
   { 
    String sRequest = this.GetRequestContent(request); 
    String sResult = this.CallHandler(sRequest); 
    reponse.Clear(); 
    reponse.Expires = 0; 
    reponse.Write(sResult); 
    reponse.End(); 
   } 
  } 
  private String GetRequestContent(HttpRequest request) { 
   HttpRequest r = request; 
   String s = r.ToString(); 
   using (StreamReader reader = new StreamReader(request.InputStream)) { 
    return reader.ReadToEnd(); 
   } 
  } 
        private String CallHandler(String param) { 
            if (this.CallbackEventHandler != null) { 
                return this.CallbackEventHandler.RaiseCallbackEvent(this, param); 
            } 
            return ""; 
        } 
  /* 
  private ICallbackEventHandler GetScriptCallbackHandlerOnPage(String id) 
  { 
   return this.GetScriptCallbackHandler(this.Page, id); 
  } 
  private ICallbackEventHandler GetScriptCallbackHandler(Control control, String id) 
  { 
   if ((control is ICallbackEventHandler) && (control.ID == id)) 
   { 
    return control as ICallbackEventHandler; 
   } 
   foreach(Control child in control.Controls) 
   { 
    ICallbackEventHandler handler = GetScriptCallbackHandler(child, id); 
    if (handler != null) 
    { 
     return handler; 
    } 
   } 
   return null; 
  } 
  */ 
        private String GetCallbackEventReference() 
        { 
         StringBuilder sb = new StringBuilder(); 
   sb.Append("<script>"); 
   sb.Append("function " + this.ID + "(param, context) {"); 
   sb.Append("var xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');"); 
   sb.Append("xmlhttp.Open('POST', '" + HttpContext.Current.Request.Url.ToString() + "?type=__scriptcallback:" + this.ID + "', false);"); 
   sb.Append("xmlhttp.Send(param);"); 
   sb.Append(this.FunctionNameAfterCallback + "(xmlhttp.responseText, context);"); 
   sb.Append("}"); 
   sb.Append("</script>"); 
   return sb.ToString(); 
        } 
 } 
} 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • BizTalk Orchestration execute Flat file disassembler ReceivePipeline

    需求是这样,在一个inbound XML中有个一点节点使用平文件的方式存放,还要解析比如固定长度或根据特殊字符截取字段 也就是需要在流程里面先把输入的XML的节...

    阿新
  • 在DataGrid中创建一个弹出式Details窗口

    在DataGrid中创建一个弹出式Details窗口 这篇文章来自DotNetJunkie的提议。他最初写信要求我们提供一个关于如何创建在DataGrid 中...

    阿新
  • 解决msmq接收远程主机私有队列消息的问题!

    通过调用windows\system32\mqoa.dll 这个Message Queuing ActiveX Interface API函数就可以做到; 下面...

    阿新
  • idea新建springCloud项目(6)- Config Server使用

    将application.properties修改为application.yml

    MonroeCode
  • Asp.Net Core 轻松学-使用MariaDB/MySql/PostgreSQL和支持多个上下文对象

    == 注意:这里的创建数据库命令和上面创建 MariaDB/MySql 的命令有一点小小的不同 ==

    梁规晓
  • C# WinForm PropertyGrid用法

    关于C# PropertyGrid的用法没有找到,找到一个C++的用法。 模仿着使用了一下,感觉挺不错,分享一下。 基本用法: 拖个PropertyGr...

    静谧的小码农
  • C# 如何写 DEBUG 输出

    经常在代码中,需要使用 DEBUG 来输出一些奇怪的东西来进行测试。但是输出的窗口只有一个,如果有一个逗比在不停输出,那么就会让输出窗口看不到自己的内容。

    林德熙
  • 数据结构——java实现栈

    说故事的五公子
  • 刨解OkHttp框架

    继AsyncTask,又把手术刀指向OkHttp,有时候解析源码会上瘾。因为源码里包含的东西仿佛就是组成计算机世界的砖头,水分,只要有这些东西,就可以保罗万物,...

    HelloJack
  • JSR310新日期API(三)-日期时间格式化与解析

    前一篇文章已经比较详细地介绍了JSR-310中新增的常用的日期时间类,在实际应用中,我们也十分关注这些日期时间类的格式化操作,更加通俗来说就是字符串和日期时间类...

    Throwable

扫码关注云+社区

领取腾讯云代金券