ExtJS之ASP.NET服务器端实现ashx和asmx处理客户端请求
ExtJS是一个客户端JS和UI控件框架,不管服务器端的实现,你可以使用ASP.NET,JAVA,Ruby,PHP等做服务器端实现,都可以。这里简单说一下使用ASP.NET做服务器端和ExtJS的交互。
先说一下交互的数据格式:JSON。示例:
1: var user = {"Id":1,"Name":"Hubery","Age":23,"Email":hubery@163.com};
2:
3: //数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
4:
5: var users =
6:
7: [
8: {
9: "Id":1,
10: "Name":"Hubery",
11: "Age":23,
12: "Address":
13: [
14: {"City":"Beijing","ZipCode":"111111"},
15: {"City":"Langfang","ZipCode":"222222"}
16: ],
17: "Email":"hubery@163.com"
18: },
19: {
20: "Id":2,
21: "Name":"Chris",
22: "Age":24,
23: "Address":{"City":"Beijing","ZipCode":"100085"},
24: "Email":"chris@163.com"
25: }
26: ] ;
27:
28: //注意有特殊字符需要反斜线转义。
29:
服务器端返回单个对象,或对象list(数组),必须是JSON格式。
然后说一下服务器端的实现,大家知道,ASP.NET服务器端的handler有3种: aspx页面,自定义HttpHandler,和Webservice。
1. 服务器端使用ashx ( HttpHandler ) 处理客户端请求,返回list
客户端:
1: var store = new Ext.data.JsonStore({
2: url: 'DefaultHandler.ashx?method=getlist',
3:
4: // ….
5:
6: })
服务器端:
1: using System;
2: using System.Web;
3: using System.Collections.Generic;
4: using System.Web.Script.Serialization;
5:
6: public class DefaultHandler : IHttpHandler {
7: public void ProcessRequest (HttpContext context)
8: {
9: string response = string.Empty;
10: string str = context.Request.QueryString["method"];
11:
12: if (string.IsNullOrEmpty(str))
13: {
14: context.Response.Write("error!");
15: return;
16: }
17:
18: switch (str)
19: {
20: case "getlist":
21: response = GetList(context);
22: break;
23: //下边还有可以接着写.
24: }
25: context.Response.Write(response);
26: context.Response.End();
27:
28: }
29:
30: public bool IsReusable {
31: get {
32: return false;
33: }
34: }
35:
36: public string GetList(HttpContext context)
37: {
38:
39: //从数据库取得list数据:
40: List<myEntity> data = DAL.GetData();
41:
42: return ToJson(data.ToArray());
43:
44: }
45:
46: //序列化对象为json数据
47: public string ToJson(object o)
48: {
49: JavaScriptSerializer j = new JavaScriptSerializer();
50: return j.Serialize(o);
51: }
52:
53: }
54:
本例也可以进一步优化成: url: 'DefaultHandler.ashx?provider=myproviderA&method=getlist', 在DefaultHandler 中处理provider参数,用工厂模式创建其他的provider,返回list。最后不要忘了在web.config配置相应的handler的类或httpHandlerFactory。
2. 服务器端使用asmx ( Web Service ) 处理客户端请求,返回单个值或对象。
有了ASP.NET AJAX,有了ScriptManager,在JS中调用服务器端WebService非常方便:
1: <asp:ScriptManager ID="SM1" runat="server">
2: <Services>
3: <asp:ServiceReference Path="WebServiceSample.asmx"/>
4: </Services>
5: </asp:ScriptManager>
或者动态声明WebService:
1: ScriptManager sm = getScriptManager();
2: sm.Services.Add(new ServiceReference(servicePath));//"WebServiceSample.asmx"
WebService实现:
1: using System;
2: using System.Web;
3: using System.Web.Services;
4: using System.Web.Services.Protocols;
5: using System.Web.Script.Services;
6: using System.Collections.Generic;
7:
8: [WebService(Namespace = "http://tempuri.org/")]
9: [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
10: // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
11: [ScriptService] //[ScriptService]一定要,这样script才能调用web service
12: [ToolboxItem(false)]
13: public class WebServiceSample: System.Web.Services.WebService
14: {
15: [WebMethod]
16: public string TestMethod()
17: {
18: return “hello world”;
19: }
20: }
21:
在JS中就可以调用:WebServiceSample.TestMethod(param, onSuccessCallback)。
当然,你也可以测试一下下面的Ext调用方法:
1: Ext.Ajax.request({
2: method: "post",
3: url: "WebServiceSample.asmx/TestMethod",
4: jsonData: {sourceID: 1, targetID: 2, type: "above"}, //如果WebMethod有参数的话, int:sourceID, int:targetID, string:type
5:
6: success: function(request) {
7: var root = forumTree.root;
8: removeChildNodes(root); // remove root is all child nodes
9: appendChildNodesFromServerData(root); // load data
10: },
11: failure: function() {
12: Ext.MessageBox.show({
13: title: '版块管理',
14: msg: '对不起,操作执行失败,请重试!',
15: buttons: Ext.MessageBox.OK,
16: icon: Ext.MessageBox.ERROR
17: });
18: }
19: });
20:
或许您对以下相关文章有兴趣:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2008-04-30 Tail -f