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();
        }

}
}

asp.net回调javascript相关推荐

  1. (转)用ASP.NET向Javascript传递变量 方法1:

    (转)用ASP.NET向Javascript传递变量 方法1: 用一个隐藏控件,把变量的值给隐藏控件,再用Javascript去找隐藏控件的值 window.document.getElementBy ...

  2. ASP.NET与JavaScript联合操作之一 选择DataGrid中的CheckBox控件后该行背景变色

    在网络开发中,经常遇到需要使用ASP.NET与JavaScript联合进行控制的情况.在本篇中,将使用DataGrid进行数据绑定,使用Javascript控制当选中其中的checkbox时,该行颜色 ...

  3. Asp.Net中用javascript实现弹出窗口永远居中

    //Asp.Net中用javascript实现弹出窗口永远居中 function ShowDialog(url)  {    var  iWidth=600; //模态窗口宽度   var  iHei ...

  4. 高效管理ASP.NET的JavaScript库

    简介 对于ASP.NET开发人员来说,管理项目中的JavaScript都很随意: 我想这很大程度上可能是因为网上没有如何妥善处理ASP.NET中JavaScript的可靠信息.此文的目的就是提供一种最 ...

  5. Asp.net AJAX JavaScript 基本类型扩展(7)——String 类型及其扩展

    参考: JScript  语言参考 http://msdn2.microsoft.com/en-us/library/c12461ed-986a-450b-be3d-81a4d808b48b Asp. ...

  6. asp php flash java,Linux_Flash 和 ASP / PHP 以及 javascript 的交互, 唉,第一次写文章,真是 - phpStudy...

    Flash 和 ASP / PHP 以及 javascript 的交互 唉,第一次写文章,真是很紧张,这是前几天在网上查资料和自己研究的结果,希望能对一些朋友有用.水平所限,肯定有错漏之处,烦劳高手指 ...

  7. Visual studio 中调试ASP程序、Javascript 代码 - 刘稻博客

    2019独角兽企业重金招聘Python工程师标准>>> PS: 1.在调试asp时,要先附加进程(附加到:自动:与具体调试网站对应的 dllhost.exe 或 w3wp.exe . ...

  8. 在ASP.NET使用javascript的一点小技巧

    我们在进行ASP.NET开发时,经常会用到一些javascript脚本,比如: private void Button1_Click(object sender, System.EventArgs e ...

  9. asp.net与JAVASCRIPT函数的相互调用

    1.如何在JavaScript访问C#函数? 方法一:   (1).首先建立一个按钮,在后台将调用或处理的内容写入button_click中;   (2).在前台写一个js函数,内容为document ...

  10. 在ASP.NET使用javascript的一点小技巧(转www.chinacs.net 中文C#技术站 )

    我们在进行ASP.NET开发时,经常会用到一些javascript脚本,比如: private void Button1_Click(object sender, System.EventArgs e ...

最新文章

  1. 管理的最高境界:残缺中的和谐
  2. python循环练习_Python循环练习
  3. 必要时进行保护性拷贝
  4. C# 中,利用 Conditional 定义条件方法
  5. JSON cannot be resolved 解决方法
  6. 怎么让字体拥有金属风格?15种不同的金属风格文字效果ps样式不可错过!
  7. Pubwin EP常见问题(转)
  8. ios kb转m_字节、kb、M怎么换算
  9. 基因组变异检测概述(SNP、InDel、SV)
  10. 宽带和流量是分开的吗_宽带、带宽和流量的区别
  11. 视口锁定解锁lisp_CAD锁定和解锁视口的快捷键分别是什么
  12. 中国人寿保险软件开发机试题 java实现
  13. [附源码]Python计算机毕业设计航空订票系统Django(程序+LW)
  14. jsp小区物业停车管理系统毕业设计
  15. 工作日记:CSS 让img变成颜色变成白色/黑色
  16. 悉尼大学计算机科学本科学费多少,2020年悉尼大学开设了哪些IT专业?学费是多少?入学要求有哪些?...
  17. 利用python抓取指定格式数据并翻译
  18. Spring AOP之坑:完全搞清楚advice的执行顺序
  19. 蒋涛作序盛赞Leo新作为 程序员职场实用百科全书 —— 程序员羊皮卷 连载 1
  20. 用计算机数字弹侧脸,侧脸钢琴简谱-数字双手-于果

热门文章

  1. Netlink0004 --- 多播机制的用法
  2. Uboot下SPI FLASH的添加(SPI 控制器采用软件模拟的方式)
  3. freeswitch被叫忙处理
  4. PostgreSQL创建数据库用户
  5. Idle进程的切换过程
  6. [C++] C/C++ 取整函数ceil(),floor()
  7. 排序 不用order by_Sort Techniques:介绍九种排序算法
  8. excel取整数的函数_Excel教程:取整函数INT 与TRUNC~~Excel新技能
  9. 凸优化系列二:确定步长一维搜索算法
  10. 链表常见操作java实现一:链表初始化,求链表长度