ScriptManager EnablePageMethods 与 JSON 序列化
当设定 ScriptManager 控件的 EnablePageMethods 属性值为 True 时,我们可以从客户端指令码呼叫 ASP.NET 网页中的公用静态网页方法,而且它预设就支持 JSON 序列化。在本文中将使用 ScriptManager 的 PageMethods,重新做一次上篇「CallBack PageCommand 与 JSON 序列化」文章的范例,来比较「CallBack PageCommand」及 「ScriptManager PageMethods」之间的差异。
我们先来复习上篇范例 CallBack PageCommand 的运作流程如下
客户端物件 -> 1.客户端 JSON 序列化 -> CallBack 呼叫伺服端 -> 2.伺服服端 JSON 反序列化还原对象 -> 修改对象属性
-> 3.伺服端 JSON 序列化 -> CallBack 回传客户端 -> 4.客户端 JSON 反序列化还原物件
相同的需求,以 ScriptManager PageMethods 改写的运作流程式如下
客户端物件 -> 1.呼叫伺服端的静态方法-> 修改对象属性 -> 2.接收伺服端回传的回呼函式
接下来我们就利用 ScriptManager PageMethods 来实作上述的范例,首先将 ScriptManager 控件的 EnablePageMethods 属性值设为 True。
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True" >
在页面上放置一个 HTMLButton,按钮 onclick 时执行 CallServer 函式来呼叫伺服端的静态方法。其中 CallServer 函式中会呼叫 GetUser 产生对象,ASP.NET 机制会自动将此对象利用 JSON 序列化,传给伺服端的 GetServerUser 静态方法。当伺服端执行结束,会以 CallServerResult 函式接回伺服端回传的结果并显示对象属性值。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>PageMethod</title>
<script type="text/jscript">
function GetUser(){
var oUser={
ID : "007",
Name : "jeff"
};
return oUser;
}
//执行伺服端函式
function CallServer(){
var oUser = GetUser(); //准备传给伺服端的对象
PageMethods.GetServerUser(oUser, CallServerResult);
}
//回呼函式
function CallServerResult(result){
//显示 CallBack 后的对象
alert('Server:\n'+'ID:'+result.ID+'\nName:'+result.Name);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True">
</asp:ScriptManager>
<input type="button" value="执行 PageMethod" onclick="CallServer()" /><br />
</div>
</form>
</body>
</html>
再来撰写伺服端的 GetServerUser 静态方法,并以 <System.Web.Services.WebMethod> 标记此方法。GetServerUser 方法的 Value 参数为 TUserData 型别,ASP.NET 机制会自动传客户端传入的字符串利用 JSON 反序列化为 TUserData 型别的对象,在此方法中修改对象的属性值,再回传给客户端。
Public Shared Function GetServerUser(ByVal Value As TUserData) As TUserData
'修改客户端传入的对象,再传回客户端
Value.ID = "012"
Value.Name = "tony"
Return Value
End Function
<Serializable()> _
Public Class TUserData
Dim FID As String = String.Empty
Dim FName As String = String.Empty
Public Property ID() As String
Get
Return FID
End Get
Set(ByVal value As String)
FID = value
End Set
End Property
Public Property Name() As String
Get
Return FName
End Get
Set(ByVal value As String)
FName = value
End Set
End Property
End Class
执行结果如下
结论:「ScriptManager PageMethods」与「CallBack PageCommand」比较
依上述的示范,会不会发觉同样的需求使用「ScriptManager PageMethods」比「CallBack PageCommand」来处理显的更简单了,在「ScriptManager PageMethods」的运作流程中虽然使用了 JSON 序列化,可是在程序代码中完全不需自行处理 JSON 序列化/反序列化的动作。
理论上「ScriptManager PageMethods」应该可完全取代「CallBack PageCommand」,不过事实上并不尽然,正确的说是依使用时机而定。因为「ScriptManager PageMethods」是呼叫伺服端的静态方法,所以无法存取页面上的控件,而「CallBack PageCommand」则可以存取页面上的控件;在执行效能上「ScriptManager PageMethods」会优于「CallBack PageCommand」,因为它省略页面控件加载的动作。
ScriptManager EnablePageMethods 与 JSON 序列化相关推荐
- C#里XML(JSON)序列化时,自动隐藏值为Null的成员的输出
原文:C#里XML(JSON)序列化时,自动隐藏值为Null的成员的输出 从StackOverflow里找到的答案.发现对最新的Newtownsoft的JSON序列化也同样适用. https://st ...
- .NET 自定义Json序列化时间格式
.NET 自定义Json序列化时间格式 Intro 和 JAVA 项目组对接,他们的接口返回的数据是一个json字符串,里面的时间有的是Unix时间戳,有的是string类型,有的还是空,默认序列化规 ...
- C# Json 序列化与反序列化二
/// <summary>/// 将对象转换为 JSON 字符串/// </summary>/// <typeparam name="T">&l ...
- DotNet的JSON序列化与反序列化
JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...
- 解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json
1..Net开源Json序列化工具Newtonsoft.Json中提供了解决序列化的循环引用问题: 方式1:指定Json序列化配置为 ReferenceLoopHandling.Ignore 方式2: ...
- xml 和 json 序列化忽略字段
xml 和 json 序列化忽略字段: @JsonIgnore@XmlTransient 转载于:https://www.cnblogs.com/xiluhua/p/9192577.html
- 解决Python自带的json序列化工具不能序列化datetime类型数据问题
解决Python自带的json序列化工具不能序列化datetime类型数据问题 参考文章: (1)解决Python自带的json序列化工具不能序列化datetime类型数据问题 (2)https:// ...
- Logstash为什么那么慢?—— json序列化
今天跟峡谷金桥聊天,询问起Logstash的性能,金桥提示说Logstash中json的序列化是浪费性能的一方面.于是便有了下面的测试: 第一步,造数据 首先需要造一份数据,数据可以通过logstas ...
- JSON序列化和反序列化还有这种玩法
Mixin对于前端开发者可不陌生,Vue.React等知名前端框架都使用了Mixin.而对于后端开发,尤其是Java后端开发来说Mixin却是一个很陌生的概念.今天来我们通过Jackson让后端开发者 ...
- Object of type 'ListSerializer' is not JSON serializable “listserializer”类型的对象不可JSON序列化...
Object of type 'ListSerializer' is not JSON serializable "listserializer"类型的对象不可JSON序列化 一般 ...
最新文章
- 10.1 国庆 考试
- 大厂的 404 页面都长啥样?最后一个绝了...
- 《C++STL基础及应用》读书笔记
- jsp_servlet时序图
- 【Python学习系列五】Python网络爬虫框架Scrapy环境搭建
- 一款名为Blue_Moon的后台模板的初步研究
- leetcode 4 --- 寻找两个有序数组的中位数
- python 转成摩尔斯电码_【无线电史话】比莫尔斯电码更直观 | 1919年的护林员通过Myer码传递信息...
- 第156天:canvas(三)
- 动态网页程序设计报告(留言板)
- 大一计算机基础考试知识点,大学计算机基础考试知识点(完整版)
- 【Ansys Workbench】—响应面优化操作步骤
- numpy 下载安装
- 18年12月英语六级第一套听力单词
- 深度学习双显卡配置_gpu – 我可以在笔记本电脑上使用intel高清显卡实现深度学习模型...
- VTK学习笔记(十一)VTK数据重采样
- 企业微信获取corpid,Secret,Agentid
- Set_output_delay怎么使用?
- 高仿淘宝商品详情标题栏渐变
- 高精度18位 5 MSPS 低功耗数据采集信号链_电工基础电路图讲解