`
xiangxingchina
  • 浏览: 523513 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ext.FormPanel之第五式(综合篇)

    博客分类:
  • ext
 
阅读更多

上篇 和前面的介绍中,我们基本上对form表单中常见组件有了简单的认识,今天我们做个综合点的例子,向服务器提交下!
其实这篇文章很简单,没有什么发光点,暂放首页半天,忘各位理解!
先来个简单的例子,以说明formpanel如何把数据传给其他页面。
效果图:

现在我们要实现的效果是:点击确定,把值传到另一页面!,如下:

原页面js代码为:

Ext.onReady( function (){
  Ext.QuickTips.init();
  
var  form = new  Ext.FormPanel({
     frame:
true ,
     width:
300 ,
     
// monitorValid:true,//绑定验证
     layout: " form " ,
     labelWidth:
70 ,
     title:
" 添加个人信息 " ,
     labelAlign:
" left " ,
     renderTo:Ext.getBody(),
     submit: 
function (){
                    
this .getEl().dom.action  =   ' GetForm.aspx ' ,
                    
this .getEl().dom.method = ' POST ' ,
                    
this .getEl().dom.submit();
              },
     items:[{
               xtype:
" textfield " ,
               fieldLabel:
" 用户名 " ,
               
// id:"UserName",
               allowBlank: false ,
               blankText:
" 不能为空,请正确填写 " ,
               name:
" UserName " ,
               anchor:
" 90% "
           },{
               xtype:
" textfield " ,
               fieldLabel:
" 昵称 " ,
               
// id:"SmallName",
               name: " SmallName " ,
               anchor:
" 90% "
           },{
               xtype:
" datefield " ,
               fieldLabel:
" 注册日期 " ,
               
// id:"RegDate",
               name: " RegDate " ,
               anchor:
" 90% "
           }],
      
});

接受页面GetForm.aspx的cs代码为:

protected   void  Page_Load( object  sender, EventArgs e)
    {
        
string  UserName  =  Request.Form[ " UserName " ];
        
string  SmallName  =  Request.Form[ " SmallName " ];
        
string  RegDate  =  Request.Form[ " RegDate " ];

        Response.Write(UserName 
+   " <br/> "   +  SmallName  +   " <br/> "   +  RegDate);
    }

因为很简单,我做个简要说明:

// 几点说明
1 .首先定义submit参数的执行函数,即:
   submit: 
function (){
                    
this .getEl().dom.action  =   ' GetForm.aspx ' , // 转向页面地址
                     this .getEl().dom.method = ' POST ' , // 方式
                     this .getEl().dom.submit(); // 提交!
              },
2 .为按钮添加触发相应的提交(取消)事件(这样就不是默认的ajax提交):
   buttons:[{text:
" 确定 " ,handler:login,formBind: true },{text: " 取消 " ,handler:reset}]
  });
  
function  login(){
         form.form.submit();
// 提交
   }
   
function  reset(){
         form.form.reset();
// 取消
   }
3 .如果你想绑定验证,在form表单添加参数monitorValid: true ,然后在按钮配置参数中添加formBind: true ,如
       buttons:[{text:
" 确定 " ,handler:login,formBind: true },{text: " 取消 " ,handler:reset}]
则只有所有的填写字段都满足条件时,
" 确定 " 方可提交!如下图,



好了,一个简单的formpanel的提交的原理弄清楚啦!
有关form提交数据的方法有多种,大家可以参考http://www.17ext.com/showtopic-55.aspx (三种ext提交数据的方式),

以后有机会我们再讨论!
下面我们来做个复杂点(只是样子)的form,示例一下(还是上面的原理)!
效果图:

传到GetForm.aspx页面后显示:

不过在传过来的页面要记得ValidateRequest="false",安全编码我就暂且不讨论了!
js代码:

Ext.onReady( function (){
  Ext.QuickTips.init();
  
var  form = new  Ext.FormPanel({
     frame:
true ,
     width:
500 ,
     monitorValid:
true , // 把有formBind:true的按钮和验证绑定
     layout: " form " ,
     labelWidth:
55 ,
     title:
" 添加个人信息 " ,
     labelAlign:
" right " ,
     renderTo:Ext.getBody(),
     submit: 
function (){
                    
this .getEl().dom.action  =   ' GetForm.aspx ' ,
                    
this .getEl().dom.method = ' POST ' ,
                    
this .getEl().dom.submit();
              },
     items:[{
               xtype:
" panel " ,
               layout:
" column " ,
               fieldLabel:
" 用户名 " ,
               isFormField:
true ,
               items:[{
                         columnWidth:.
5 ,
                         xtype:
" textfield " ,
                         allowBlank:
false ,
                         blankText:
" 不能为空,请填写 " ,
                         name:
" UserName " ,
                         anchor:
" 90% "
               },{
                         columnWidth:.
20 ,
                         layout:
" form " ,
                         labelWidth:
40 ,
                         labelAlign:
" right " ,
                         items:[{
                                   xtype:
" radio " ,
                                   fieldLabel:
" 性别 " ,
                                   boxLabel:
" " ,
                                   name:
" Sex " ,
                                   checked:
true ,
                                   inputValue:
" man " , // 这里如果用value,值是on,所以用inputValue(出现这种情况的是radio,checkbox)
                                   anchor: " 95% "
                         }]
               },{
                         columnWidth:.
30 ,
                         layout:
" form " ,
                         labelWidth:
1 , // 让标签宽度为很小的值(奇怪的是为0时反而不行)
                         items:[{
                                   xtype:
" radio " ,
                                   boxLabel:
" " ,
                                   labelSeparator:
"" , // 去除分隔符“:”
                                   name: " Sex " ,
                                   inputValue:
" woman " ,
                                   anchor:
" 95% "
                         }]
               }]
     },{
// 上面是第一行
               xtype: " panel " ,
               layout:
" column " ,
               fieldLabel:
" 出生日期 " ,
               isFormField:
true ,
               items:[{
                         columnWidth:.
5 ,
                         xtype:
" datefield " ,
                         name:
" BirthDate " ,
                         anchor:
" 90% "
               },{
                         columnWidth:.
5 ,
                         layout:
" form " ,
                         labelWidth:
40 , // 注意,这个参数在这里可以调整简单fieldLabel的布局位置
                         items:[{
                                   xtype:
" combo " ,
                                   name:
" Degree " ,
                                   fieldLabel:
" 学位 " ,
                                   store:[
" 小学 " , " 初中 " , " 高中 " , " 专科 " , " 本科 " , " 硕士 " , " 博士 " ],
                                   emptyText:
" 请选择适合你的学历 " ,
                                   anchor:
" 90% "
                         }]
               }]
     },{
// 上面是第二行
               xtype: " panel " ,
               layout:
" column " ,
               isFormField:
true ,
               fieldLabel:
" 使用框架 " ,
               items:[{
                         columnWidth:.
2 ,
                         xtype:
" checkbox " ,
                         boxLabel:
" Spring.net " ,
                         name:
" SpringNet " ,
                         inputValue:
" spring " // 这里如果用value,值是on,所以用inputValue
               },{
                         columnWidth:.
2 ,
                         layout:
" form " ,
                         labelWidth:
1 ,
                         items:[{
                                   xtype:
" checkbox " ,
                                   boxLabel:
" Nhibernate " ,
                                   labelSeparator:
"" ,
                                   name:
" NHibernate " ,
                                   inputValue:
" nhibernate " ,
                                   anchor:
" 95% "
                         }]
               },{
                         columnWidth:.
6 ,
                         layout:
" form " ,
                         labelWidth:
1 ,
                         items:[{
                                   xtype:
" checkbox " ,
                                   boxLabel:
" Linq " ,
                                   labelSeparator:
"" ,
                                   name:
" Linq " ,
                                   inputValue:
" linq " ,
                                   anchor:
" 95% "
                         }]
               }]
               
     },{
// 上面是第三行
               xtype: " textfield " ,
               fieldLabel:
" Email " ,
               name:
" Email " ,
               vtype:
" email " , // email验证,如果想自定义验证的话,请参见前面的文章
               vtypeText: " email格式错误! " ,
               anchor:
" 56% " // 控制文本框的长度
               
     },{
// 上面是第四行
               xtype: " textarea " ,
               fieldLabel:
" 个性签名 " ,
               name:
" OneWord " ,
               height:
50 ,
               anchor:
" 95% "
     },{
// 上面是第五行
               xtype: " htmleditor " ,
               fieldLabel:
" 想说的话 " ,
               name:
" WantToSay " ,
               anchor:
" 95% " ,
               enableAlignments:
false , // 去除左右对齐工具栏
               enableLists: false // 去除列表工具栏
     }],
      buttons:[{text:
" 确定 " ,handler:login,formBind: true },{text: " 取消 " ,handler:reset}]
  });
  
function  login(){
         form.form.submit();
   }
   
function  reset(){
         form.form.reset();
   }
});

接受cs页面的代码:

protected   void  Page_Load( object  sender, EventArgs e)
    {
        
string  UserName  =  Request.Form[ " UserName " ];
        
string  Sex  =  Request.Form[ " Sex " ];
        
string  BirthDate  =  Request.Form[ " BirthDate " ];
        
string  Degree  =  Request.Form[ " Degree " ];
        
string  SpringNet  =  Request.Form[ " SpringNet " ];
        
string  NHibernate  =  Request.Form[ " NHibernate " ];
        
string  Linq  =  Request.Form[ " Linq " ];
        
string  Email = Request.Form[ " Email " ];
        
string  OneWord  =  Request.Form[ " OneWord " ];
        
string  WantToSay  =  Request.Form[ " WantToSay " ];

        Response.Write(
" 用户名: "   +  UserName  +   " <br/> " );
        Response.Write(
" 性别是: "   +  Sex  +   " <br/> " );
        Response.Write(
" 出生日期: "   +  BirthDate  +   " <br/> " );
        Response.Write(
" 学位: "   +  Degree  +   " <br/> " );
        Response.Write(
" 使用框架有: " );
        
if  (SpringNet  !=   null )
        {
            Response.Write(SpringNet 
+   " , " );
        }
        
if  (NHibernate  !=   null )
        {
            Response.Write(NHibernate 
+   " , " );
        }
        
if  (Linq  !=   null )
        {
            Response.Write(Linq 
+   " , " );
        }
        Response.Write(
" <br/> " );
        Response.Write(
" 邮件地址: "   +  Email);
        Response.Write(
" 个性签名: "   +  OneWord  +   " <br/> " );
        Response.Write(
" 想说的话: "   +  WantToSay);
    }

经过一个简单的传值原理传值后,一个表单就可以把数据存储到数据库中去了!

// 注意几点
1 .绑定验证的两个参数 monitorValid: true ,formBind: true
2 .精确布局要注意的参数为和width有关的:width: 500 ,labelWidth: 55 ,columnWidth:. 5 ,anchor: " 90% " ,isFormField:true等
3 .radio和checkbox通过inputValue获取值,页面传值
4.多列多组件布局为form和column和form布局组合使用,请参考源码分析!

至此,formpanel的简单使用就告一段落,但是formpanel的应用还远远没有讲到,有机会我们再在高级篇里讨论!
谢谢各位朋友的支持!
在下篇中我们接着诉说另外一个组件tabpanel,希望各位支持,拍砖,给我动力!

最后,推荐一个网站:浪曦视频网

js文件下载:关键js代码下载

分享到:
评论

相关推荐

    .archExtJs2.0学习系列(7)--Ext.FormPanel之第四式(其他组件示例篇).doc

    首先,Ext.FormPanel是ExtJS中用于创建表单的主要组件,它允许我们构建复杂的表单布局并处理用户输入的数据。 1. **Checkbox简单示例** Checkbox在ExtJS中用于创建复选框,可以用来让用户选择多个选项。在示例中,...

    Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别

    在EXTJS框架中,`Ext.FormPanel`和`Ext.Ajax.request`提供了两种不同的异步提交方法,它们各自有其特点和适用场景。下面我们将详细探讨这两种方式的区别。 1. **Ext.FormPanel的异步提交** `Ext.FormPanel` 是...

    EXT.form组件

    5. `field`:`Ext.form.Field`是所有表单字段的基础类,提供了一般性的属性和方法,如验证和状态管理。 6. `fieldset`:`Ext.form.FieldSet`是用于组织和分组表单字段的容器,通常包含一个标题和可选的边框。 7. `...

    Ext 添加功能form表单实例

    在这个例子中,通过`new Ext.FormPanel`来创建了一个表单面板,并设置了一些关键属性: - `frame`: 设置为`true`,表示表单周围有一个边框。 - `width` 和 `height`: 分别设置了表单的宽度和高度。 - `layout`: ...

    ext几个实例

    **5. 功能展示** 登录成功和失败的场景会在前端展示。成功时,可能会跳转至主页面;失败时,则显示错误信息。EXTJS提供了丰富的UI组件,可以方便地创建各种反馈提示。 **6. Ext.AJAX.Request常用参数** - **url**...

    Ext组件描述,各个组件含义

    **2.16 Form Panel (Ext.FormPanel)** - **xtype**: `form` - **功能描述**:Form Panel 是一个包含表单字段的面板。 - **主要用途**:用于创建和管理表单,支持数据验证和提交。 **2.17 Checkbox (Ext.form....

    extjs非常好的几个例子,包括登陆,动态编辑表格等

    【EXTJS】Ext.AJAX 用于前端与后端交互的核心技术 EXTJS 是一个功能强大的JavaScript框架,尤其在构建富互联网应用(RIA)时,它提供了丰富的组件库和便捷的Ajax交互方式。在EXTJS中,Ext.AJAX是进行异步数据通信的...

    ExtJs中处理后台传过来的date对象显示到页面上

    var store = Ext.create('Ext.data.Store', { model: 'Employee', proxy: { type: 'ajax', url: '/api/employees', reader: { type: 'json', rootProperty: 'data' } }, autoLoad: true }); ``` 3. **...

    Ext js Xtype

    - **Form Components**: 用于构建表单的组件,如`Ext.FormPanel`,`Ext.form.Checkbox`,`Ext.form.TextField`等。 - **Chart Components**: 提供了各种图表组件,如`Ext.chart.Chart`,`Ext.chart.BarChart`,`Ext....

    ext学习资料ext学习资料

    5. **数据加载和通信** Grid组件可以通过不同的数据代理(如`MemoryProxy`、`HttpProxy`)来获取数据。`HttpProxy`常用于从服务器获取数据,`JsonReader`用于解析JSON响应: ```javascript var store = new Ext....

    ExtJs_xtype一览

    5. **表单及表单域组件** - `form`:`Ext.FormPanel` 或 `Ext.form.FormPanel`,用于创建表单的容器。 - `checkbox`:`Ext.form.Checkbox`,多选框组件。 - `combo`:`Ext.form.ComboBox`,下拉选择框。 - `...

    Extjs帮助文档.pdf

    接下来将详细介绍文档中提到的几个核心概念,包括`Ext.MessageBox`、`Ext.Panel`、`Ext.Window`、`Ext.FormPanel`、`Ext.TabPanel`、`Ext.XTemplate`和`Ext.TreePanel`以及如何在Extjs中实现主题(换肤)功能。...

    Ext+JS高级程序设计.rar

    第5章 在.NET中使用Ext.Direct 142 5.1 路由器包的内容 142 5.2 DIY一个Ext.Direct实例 152 5.3 NewtonSoft.JSON 155 5.3.1 JSON的序列化和反序列化 155 5.3.2 LINQ to JSON 158 5.3.3 JSON文本的输出 162 5.4 本章...

    Ext 3.x 文件批量上传

    在Ext中,我们可以使用`Ext.form.FormPanel`来定义表单,并通过`Ext.form.FileField`(也称为`FileUploadField`)添加文件选择功能。此字段允许用户选择一个或多个文件,并触发上传操作。 `说明.txt`文件可能包含了...

    ext判断该用户是否在数据库中存在

    在上面的代码中,我们可以看到使用了 Ext.Ajax.request 方法来发送 AJAX 请求,检测用户名是否已经存在于数据库中。在服务器端,可以使用数据库查询来检测用户名是否已经存在于数据库中。如果用户名已经存在,则返回...

    ext 的ppt ext 的ppt ext 的pptext 的pptext 的ppt

    在本文中,我们将深入探讨Ext Form组件,这是Ext JS中的核心组件之一,用于创建复杂的表单界面。表单是任何Web应用中收集用户输入的关键部分,而Ext JS提供了一套完整的工具来帮助开发者创建、验证和提交表单数据。 ...

    Ext.NET.MVC.Pro.2.2.0.MVC.Examples.Explorer.zip

    5. **Demo**: 示例涵盖了各种Ext.NET MVC控件的用法,如表格(GridPanel)、窗体(FormPanel)、树形视图(TreePanel)、图表(Charts)、菜单(Menu)、工具提示(ToolTip)等。通过这些示例,开发者可以快速学习...

    Ext3.0 api帮助文档

    Ext3.0 API是Ext JS库的一个重要版本,它提供了丰富的JavaScript组件和接口,用于构建交互式的Web应用程序。这个API帮助文档包含了详细的功能说明、示例代码和类库结构,帮助开发者更好地理解和利用Ext3.0的功能。 ...

Global site tag (gtag.js) - Google Analytics