Asp.net里的客户端回调机制

简介:



前台部分:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>回调页面</title>
    <script type="text/javascript">
    function GetResult(result)
    {
        document.forms[0].TextBox1.value=result;    
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input id="Button1" type="button" value="执行" onclick="TestCallback(this.form.TextBox1.value);" />
        <asp:TextBox ID="TextBox1" runat="server" Text="ASP.Net文本框控件"></asp:TextBox>
    </div>
    </form>
</body>
</html>

后台:

..............部分省略........

    public partial class _Default : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
    {
        private string _callbackResult = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            string cbRef = Page.ClientScript.GetCallbackEventReference(this, "val", "GetResult", null);
            string cbScript = "function TestCallback(val){" + cbRef + ";}";
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "TestCallback", cbScript, true);
        }
        public void RaiseCallbackEvent(string evtArg)
        {
            _callbackResult = "#"+evtArg+"#";
        }
        public string GetCallbackResult()
        {
            return _callbackResult;
        }
    }

 

简单的功能,就是对文本框的内容后台做了处理,加上了"#"括了起来,不回传整个页面。

有点像RPC,脚本发起请求,然后回调,页面实现了System.Web.UI.ICallbackEventHandler的2个方法

RaiseCallbackEvent和GetCallbackResult。

整个过程是:

当点击“执行”按钮后,执行

TestCallback(this.form.TextBox1.value);脚本,参数值是文本框的内容,这里默认是"ASP.Net文本框控件",

此参数会发送,然后看下public void RaiseCallbackEvent(string evtArg),他的形参就是客户端发来的数据,这里就是"ASP.Net文本框控件",_callbackResult = "#"+evtArg+"#";处理的数据保存到实例变量里,接着调用

public string GetCallbackResult(),返回该值,实际中返回的并不一定是同一个(比如这里的_callbackResult),比如说客户端发来的是个用户id号,可以读数据库返回个用户名等等。

结果返回给客户端,执行回调函数

    function GetResult(result)
    {
        document.forms[0].TextBox1.value=result;    
    }

他的参数就是服务端的响应结果,这里是“#ASP.Net文本框控件#“,接着函数体内可以根据结果参数执行相应的操作。

 

备注:

附上msdn的一段。

 

public stringGetCallbackEventReference(
	Control control,
	stringargument,
	stringclientCallback,
	stringcontext
)

参数

control
类型: System.Web.UI..::.Control

处理客户端回调的服务器 Control。该控件必须实现 ICallbackEventHandler 接口并提供 RaiseCallbackEvent 方法。

argument
类型:System ..::.String

从客户端脚本传递给服务器的一个参数

RaiseCallbackEvent 方法。

clientCallback
类型:System ..::.String

一个客户端事件处理程序的名称,该处理程序接收成功的服务器事件的结果。

context
类型:System ..::.String

启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序。

返回值

类型:System ..::.String

调用客户端回调的客户端函数的名称。





 本文转自 xcf007 51CTO博客,原文链接:http://blog.51cto.com/xcf007/342924,如需转载请自行联系原作者

相关文章
|
7月前
|
Linux Android开发 iOS开发
基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
121 0
|
设计模式 SQL 开发框架
一位.Net开发工程师的客户端技术栈的学习路线
从2018年硕士毕业后,我一直从事着.Net开发工作,趁着CSDN这次活动,给大家分享一下.Net客户端领域的技术栈的学习路线,这个学习路线,涵盖的是比较基础的内容,适合刚入门.Net的萌新学习和刚进入职场的毕业生查漏补缺,然后这个博文比较受大家的欢迎的话,后续可能会考虑出一个更详细的版本。致敬我彻夜学习的.Net。
一位.Net开发工程师的客户端技术栈的学习路线
|
监控 物联网 API
【.NET+MQTT】.NET6 环境下实现MQTT通信,以及服务端、客户端的双边消息订阅与发布的代码演示
MQTT广泛应用于工业物联网、智能家居、各类智能制造或各类自动化场景等。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,在很多受限的环境下,比如说机器与机器通信、机器与物联网通信等。好了,科普的废话不多说,下面直接通过.NET环境来实现一套MQTT通信demo,实现服务端与客户端的双边消息发布与订阅的功能和演示。
1093 0
【.NET+MQTT】.NET6 环境下实现MQTT通信,以及服务端、客户端的双边消息订阅与发布的代码演示
|
9天前
|
JSON 网络协议 API
.NET斗鱼直播弹幕客户端(上)
.NET斗鱼直播弹幕客户端(上)
|
25天前
|
NoSQL 大数据 Redis
分享5款.NET开源免费的Redis客户端组件库
分享5款.NET开源免费的Redis客户端组件库
|
1月前
|
JSON 编解码 Go
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第25天】Go语言`net/http`包提供HTTP客户端和服务器功能,简化高性能网络应用开发。本文探讨如何发起HTTP请求,常见问题及解决策略。示例展示GET和POST请求的实现。注意响应体关闭、错误处理、内容类型设置、超时管理和并发控制。最佳实践包括重用`http.Client`,使用`context.Context`,处理JSON以及记录错误日志。通过实践这些技巧,提升HTTP编程技能。
32 1
|
1月前
|
Go 开发者
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第24天】Go语言的`net/http`包在HTTP客户端编程中扮演重要角色,但使用时需注意几个常见问题:1) 检查HTTP状态码以确保请求成功;2) 记得关闭响应体以防止资源泄漏;3) 设置超时限制,避免长时间等待;4) 根据需求处理重定向。理解这些细节能提升HTTP客户端编程的效率和质量。
26 1
|
7月前
|
缓存 NoSQL 大数据
4款.NET开源的Redis客户端驱动库
4款.NET开源的Redis客户端驱动库
|
11月前
|
开发框架 前端开发 JavaScript
ASP.NET Core MVC 从入门到精通之wwwroot和客户端库
ASP.NET Core MVC 从入门到精通之wwwroot和客户端库
192 0
|
测试技术 API
【.NET6】gRPC服务端和客户端开发案例,以及minimal API服务、gRPC服务和传统webapi服务的访问效率大对决
前言:随着.Net6的发布,Minimal API成了当下受人追捧的角儿。而这之前,程序之间通信效率的王者也许可以算得上是gRPC了。那么以下咱们先通过开发一个gRPC服务的教程,然后顺势而为,再接着比拼一下minimal api服务和gRPC服务在通信上的效率。
400 0
【.NET6】gRPC服务端和客户端开发案例,以及minimal API服务、gRPC服务和传统webapi服务的访问效率大对决