巴斯光年

白天教学生,晚上教自己。致力于推进教育信息化。支持开源
随笔 - 15, 文章 - 0, 评论 - 51, 阅读 - 50411
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

ExtJS表单提交与加载全攻略

Posted on   巴斯光年  阅读(19159)  评论(4编辑  收藏  举报

ExtJS用formPanel来做为表单元素的容器。默认情况下,是使用Ajax异步提交。接下来,对formPanel的提交跟加载,做个小总结。

先来看布局代码

复制代码
 1 var frm
 2 Ext.onReady(function() {
 3     Ext.QuickTips.init();
 4     Ext.form.Field.prototype.msgTarget = 'under';
 5     new Ext.FormPanel({
 6         labelWidth: 75,
 7         id: 'frm',
 8         frame: true,
 9         title: 'simple form',
10         bodyStyle: 'padding: 5px',
11         width: 350,
12         defauls: { width: 230 },
13         defaultType: 'textfield',
14         applyTo: 'con',
15         autoHeight: true,
16         items: [
17             {
18                 fieldLabel: 'First Name',
19                 name: 'first',
20                 allowBlank: false
21             }, {
22                 fieldLabel: 'Last Name',
23                 name: 'last'
24             }, {
25                 fieldLabel: 'Company',
26                 name: 'company'
27             }, {
28                 fieldLabel: 'Email',
29                 name: 'email',
30                 vtype: 'email',
31                 allowBlank: false
32             }, {
33                 xtype: 'timefield',
34                 fieldLabel: 'Time',
35                 name: 'time',
36                 minValue: '8:00am',
37                 maxValue: '6:00pm',
38                 allowBlank: true
39             }
40         ],
41         buttons: [
42             { text: 'Save', handler: submit },
43             { text: 'load', handler: load },
44             { text: 'Reset', handler: reset }
45         ]
46     });
47     frm = Ext.getCmp('frm');
48 });
复制代码

 

效果如下:

变量frm是全局变量,用以保存对formPanel的引用。

一、提交数据

 

复制代码
 1 function submit() {
 2     if (!frm.getForm().isValid()) return;
 3     frm.getForm().submit({
 4         waitMsg: '正在提交数据',
 5         waitTitle: '提示',
 6         url: 'submit.ashx',
 7         method: 'GET',
 8         success: function(form, action) {
 9             Ext.Msg.alert('提示''保存成功');
10         },
11         failure: function(form, action) {
12             Ext.Msg.alert('提示''原因如下:' + action.result.errors.info);
13         }
14     });
15 }
复制代码

 

 服务器端代码:

 

复制代码
 1<%@ WebHandler Language="C#" Class="submit" %>
 2
 3using System;
 4using System.Web;
 5
 6public class submit : IHttpHandler {
 7    
 8    public void ProcessRequest (HttpContext context) {
 9        context.Response.ContentType = "text/json";
10        bool result = false;
11        // 简单的业务逻辑省略。可以从context.Request["表单的ID"]来读取从formPanel传递过来的表单值。
12        // 再根据这些值。做一系列的业务逻辑处理。
13        // 以下是提交成功与否,所做出的反馈。
14        if (result)
15        {
16            context.Response.Write("{ success: true, errors:{} }");
17        }

18        else
19        {
20            context.Response.Write("{ success: false, errors:{info: '错误了'} }");
21        }

22        
23    }

24 
25    public bool IsReusable {
26        get {
27            return false;
28        }

29    }

30
31}
复制代码

 

注意,无论成功与否,服务器端返回的JSON代码,一定要符合如下格式:

{ success: true, errors: {} }

success属性用于指定操作是否成功,客户端以此来判断执行的success回调还是failure回调。errors是自定义的错误信息对象。可以向里面传递你想要传递给回调函数的信息。例子中,在errors中定义了一个info属性,返回到客户端,则可以通过回调参数进行访问。比如。action.result.errors.info进行访问。

二、加载数据

客户端load函数,用以加载数据,并将数据加载到各个表单之中。

复制代码
 1 function load() {
 2     frm.getForm().load({
 3         waitMsg: '正在加载数据',
 4         waitTitle: '提示',
 5         url: 'Handler.ashx',
 6         method: 'GET',
 7         success: function(form, action) {
 8             Ext.Msg.alert('提示''加载成功');
 9         }
10     });
11 }
复制代码

 

服务端代码

 

复制代码
 1<%@ WebHandler Language="C#" Class="Handler" %>
 2
 3using System;
 4using System.Web;
 5
 6public class load : IHttpHandler {
 7    
 8    public void ProcessRequest (HttpContext context) {
 9        //string result = string.Format("{success: {0}, errors:{1}}", "false", "Hello world");
10        context.Response.ContentType = "text/json";
11        context.Response.Write(@"
12{
13    success: true,
14    data: { first: 'tom', last: 'king', company: 'microsoft', email: 'czclkg@21cn.com', time: '10:00am' }
15}
16");
17        
18    }

19 
20    public bool IsReusable {
21        get {
22            return false;
23        }

24    }

25
26}
复制代码

 

注意,跟数据的提交一样,对于数据的加载,服务器端同样也要遵循一定的格式:

{ success: true, data: {表单id: 表单值} }

success属性作用同上。主要是data。data用以保存表单元素的数据。格式是将表单的id作为属性名称,表单值作为属性值。返回客户端后,ext自动分析data属性,并将各个表单值赋值到各个表单当中。

三、表单的重置

function reset() {
    frm.getForm().reset();
}

 

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示