网站缩略图插件

2009.12.19 / 标签: / 分类: 网络拾遗
15°

效果:当鼠标指向一个链接,鼠标右下方会显示该网页截图。在留言功能上尤其好用,当鼠标停在名字上,就可预览到留言者的网页缩略图,唯一不好的就是只显示目标网站的首页。 阅读全文>>

ExtJS将GridPanel放入TabPanel中

2009.02.23 / 标签: ,, / 分类: ExtJS

完整的GridPanel也有了,我现在需要将它组装到后台管理中去。现在要求点击一下左边Tree中的“人员信息”节点,右边的TabPanel就显示出与之对应的GridPanel。最简单的方法就是在TabPanel的html属性(应该可以这么叫吧)中使用iframe来打开另一个用于显示GridPanel的页面,相关代码如下:

var c1=new Ext.tree.TreeNode({
id:'c1',
text:'人员信息',
listeners:{
'click':function(node, event) {
event.stopEvent();
var n = tab.getComponent(node.id);
if (!n) { //判断是否已经打开该面板
n = tab.add({
'id':node.id,
'title':node.text,
closable:true,  //通过html载入目标页
html:'<iframe scrolling="auto" frameborder="0" width="100%" height="100%" src="UserListGridPanel.jsp"></iframe>'
});
}
tab.setActiveTab(n);
}
}
});

这种做法虽然很简单,但是又带来两个问题:
1.页面会刷新
2.UserListGridPanel.jsp页面中也必须加载庞大的ExtJS库
当然也有办法解决了,可以使用autoLoad来解决。修改上面的代码:

var c1=new Ext.tree.TreeNode({
id:'c1',
text:'人员信息',
listeners:{
'click':function(node, event) {
event.stopEvent();
var n = tab.getComponent(node.id);
if (!n) { //判断是否已经打开该面板
n = tab.add({
'id':node.id,
'title':node.text,
closable:true,  //自动载入UserListGridPanel.jsp页面,该页面含有JavaScript,不缓存
autoLoad:{url:'UserListGridPanel.jsp',scripts:true,nocache:true}
});
}
tab.setActiveTab(n);
}
}
});

用了之后我又头大了,正常的话应该是如图下图所示。


可现在得到的却是下面这种结果。


想来想去,改来改去,最后我猜想应该是渲染的时候出问题了,上面两种方式中UserListGridPanel的renderTo属性一直都是Ext.getBody(),可是显示结果却不一样,也就是说两种情况下的Ext.getBody()不是同一个对象(OOP习惯了,什么都是对象O(∩_∩)O哈哈~)。第一种方式中Ext.getBody()指的就UserListGridPanel.jsp,而第二种方式中Ext.getBody()指的则是main.jsp。
于是试着在UserListGridPanel.jsp中创建一个id为“UserListGridPanel”的div,然后修改rederTo属性为Ext.get(‘UserListGridPanel’),看来猜的没错,这样改确实可以。可是页面又变成下面这样了:


我快抓狂了…
再次把JS翻来覆去的改了N遍,得到的结果还是那样…
可是单独运行UserListGridPanel.jsp却是正常的啊!突然想到了点什么,上面不是说用autoLoad时,被载入的页面中可以不用再载入ExtJS库吗?而我现在的UserListGridPanel.jsp中还载入了ExtJS库,会不会和main.jsp中的发生冲突了?
结果当然不言而喻了。

Ext GridPanel数据分页 服务器数据交互

2009.02.21 / 标签: ,, / 分类: ExtJS
Sofa

昨天的GridPanel虽说较为完整了,不过却缺少了数据分页功能。今天又对其再次改进,使其可以进行数据分页。改动不是很大,只是对UserListGridPanel的数据源进行了修改并增加了分页条。

UserListGridPanel = Ext.extend(Ext.grid.GridPanel,{
//初始化数据添加组件和数据修改组件
insertWin:new InsertUserInfoWindow(),
updateWin:new UpdateUserInfoWindow(),
constructor:function(){
//数据源
this['store'] = new Ext.data.Store({
url:UserListGridPanel.ACT_URL,
reader:new Ext.data.JsonReader({
root:'rows',
totalProperty:'count'
},
Ext.data.Record.create([
'UId','UName','UTrueName','UPassword'
]))
}),
UserListGridPanel.superclass.constructor.call(this,{
//将该列表渲染到网页的body中
renderTo:Ext.getBody(),
autoHeight:true,
bbar:new Ext.PagingToolbar({
pageSize:10,//每页数据大小
store:this.store
}),
width:300,
tbar:[{
text:'添加人员',
handler:function(){
this.insertWin.show();
},
scope:this
},'-',{
text:'修改人员',
handler:function(){
this.updateWin.show();
try{
this.updateWin.load(this.getSelected());
}catch(err){
Ext.Msg.alert('系统提示',err.description);
this.updateWin.close();
}
},
scope:this
},'-',{
text:'删除人员',
handler:function(){
Ext.Msg.confirm('警告','删除是不可逆的,是否确定删除?',function(btn){
if(btn == 'yes'){
this.remove();
}
},this);
},
scope:this
}],
//列模式
colModel:new Ext.grid.ColumnModel([{
align:'center',
header:'用户名',
dataIndex:'UName',
menuDisabled:true
},{
align:'center',
header:'真实姓名',
dataIndex:'UTrueName',
menuDisabled:true
},{
align:'center',
header:'密码',
dataIndex:'UPassword',
menuDisabled:true
}]),
loadMask:{msg:'数据加载中...'},
//选择模式
selModel:new Ext.grid.RowSelectionModel({
singleSelect:true,//只可单选
listeners:{
'rowselect':{
fn:function(sel,index,r){
this.fireEvent('rowselect',r);
},
scope:this
}
}
})
});
//数据加载事件,向服务器递交查询参数,这里每次查询10条数据
this.getStore().load({params:{start:0,limit:10}});
this.insertWin.on('submit',this.onInsertWinSubmit,this);
this.updateWin.on('submit',this.onUpdateWinSubmit,this);
this.addEvents('rowselect');
},
getSelected:function(){
var sm = this.getSelectionModel();
if(sm.getCount() == 0)
throw Error('您尚未选中任何人员记录!');
return sm.getSelected();
},
insert:function(r){
this.getStore().add(r);
},
update:function(r){
//更改本地数据
var sr = this.getSelected();
for(var i in sr.data){
sr.set(i,r.get(i));
}
//提交更改
sr.commit();
},
//使用AJAX方式删除数据库及数据列表中的选中数据
remove:function(){
try{
var rc = this.getSelected();
Ext.Ajax.request({
url:'user.do?action=delUser',
params:rc.data
});
this.getStore().remove(rc);
}catch(err){
Ext.Msg.alert('警告',err.description);
}
},
onInsertWinSubmit:function(win,r){
//向列表中插入新数据
this.insert(r);
},
onUpdateWinSubmit:function(win,r){
//修改列表中选中的数据
this.update(r);
}
});

Ext GridPanel 数据库增删改查完整版

2009.02.20 / 标签: / 分类: ExtJS
10°

O(∩_∩)O哈哈~终于搞定了,昨天的那些错误也不知道什么原因,后面写着写着就又好了。而且昨天那个仅仅只是读取了数据库的数据,今天这个加上了对数据库的增删改,目前尚未发现任何BUG,加上了不是很详细的注释O(∩_∩)O~,现在这个算是最终的完整版了,今后要实现其他的功能就只需要照着这个来扩充了。

/*********************基础表单,作为新增、修改表单的父类*****************************/
UserInfoFormPanel = Ext.extend(Ext.form.FormPanel,{
constructor:function(cfg){
//将子类所传递的属性参数应用于父类
if(cfg != null){
Ext.apply(this,cfg);
}
UserInfoFormPanel.superclass.constructor.call(this,{
frame:true,//边框样式
autoHeight:true,//自适应高度
baseCls:'x-plain',//底色与父窗体相同
defaultType:'textfield',//默认类型为文本框
defaults:{allowBlank:false},//默认不允许任何栏位为空
labelWidth:55,//标签宽度
items:[{
inputType:'hidden',
name:'UId',
allowBlank:true
},{
fieldLabel:'用户名',
blankText:'用户名不能为空!',
name:'UName'
},{
fieldLabel:'真实姓名',
blankText:'真实姓名不能为空!',
name:'UTrueName'
},{
fieldLabel:'密码',
inputType:'password',
blankText:'密码不能为空!',
name:'UPassword'
}]
});
this.addEvents('submit');//声明事件
},
//具体事件操作
submit:function(){
if(this.url != ""){
if(this.getForm().isValid()){
//若表单栏位验证通过,则进行提交
this.getForm().submit({
url:this.url,
success:this.onSubmit,//若服务器返回提交成功提示,则调用onSubmit方法
waitTitle:'数据提交',
waitMsg:'数据提交中,请稍候...',
scope:this
});
}else{
Ext.Msg.alert('提示','表单验证失败!');
}
}
},
//获取表单数据方法
getValues:function(){
if(this.getForm().isValid()){
return new Ext.data.Record(this.getForm().getValues());
}else{
throw Error('表单验证失败!');
}
},
//表单数据载入方法
setValues:function(r){
this.getForm().loadRecord(r);
},
//表单重置方法
reset:function(){
this.getForm().reset();
},
//触发声明的事件并传递相关参数
onSubmit:function(form,action){
this.fireEvent('submit',this,action,this.getValues());
}
});
/********************将表单置于窗口中***********************/
UserInfoWindow = Ext.extend(Ext.Window,{
form:null,
url:'',
constructor:function(cfg){
Ext.apply(this,cfg);
//带参构造
this.form = new UserInfoFormPanel({url:this.url});
UserInfoWindow.superclass.constructor.call(this,{
plain:true,
autoHeight:true,
width:250,
items:this.form,
buttonAlign:'center',
closeAction:'hide',
modal:true,
buttons:[{
text:'确定',
handler:this.onSubmitClick,
scope:this
},{
text:'取消',
handler:this.onCancelClick,
scope:this
}]
});
//声明事件
this.addEvents('submit');
//当触发submit事件后执行onSubmit
this.form.on('submit',this.onSubmit,this);
},
//窗口关闭
close:function(){
this.form.reset();
this.hide();
},
//提交表单
onSubmitClick:function(){
this.form.submit();
},
//取消操作
onCancelClick:function(){
this.close();
},
//触发submit事件并传递相关参数
onSubmit:function(form,action,values){
try{
this.fireEvent('submit',this,values);
}catch(err){
return;
}
this.close();
}
});
/*********************数据添加窗口*************************/
InsertUserInfoWindow = Ext.extend(UserInfoWindow,{
//窗口标题
title:'添加人员',
url:'user.do?action=addUser',
//重写父类的onSubmit方法,用于将新增数据的id与该数据作为一条记录添加进GridPanel。
onSubmit:function(form,action,values){
var data = values.data;
Ext.apply(data,{id:action.result.id});
try{
this.fireEvent('submit',this,new Ext.data.Record(data));
}catch(err){
Ext.Msg.alert('提示',err.description);
return;
}
this.close();
}
});
/*********************数据修改窗口**********************/
UpdateUserInfoWindow = Ext.extend(UserInfoWindow,{
title:'修改人员',
url:'user.do?action=updateUser',
//载入GridPanel中选中的数据
load:function(r){
this.form.setValues(r);
}
});
/********************用于显示数据列表*************************/
UserListGridPanel = Ext.extend(Ext.grid.GridPanel,{
//初始化数据添加组件和数据修改组件
insertWin:new InsertUserInfoWindow(),
updateWin:new UpdateUserInfoWindow(),
constructor:function(){
UserListGridPanel.superclass.constructor.call(this,{
//将该列表渲染到网页的body中
renderTo:Ext.getBody(),
autoHeight:true,
width:300,
tbar:[{
text:'添加人员',
handler:function(){
this.insertWin.show();
},
scope:this
},'-',{
text:'修改人员',
handler:function(){
this.updateWin.show();
try{
this.updateWin.load(this.getSelected());
}catch(err){
Ext.Msg.alert('系统提示',err.description);
this.updateWin.close();
}
},
scope:this
},'-',{
text:'删除人员',
handler:function(){
Ext.Msg.confirm('警告','删除是不可逆的,是否确定删除?',function(btn){
if(btn == 'yes'){
this.remove();
}
},this);
},
scope:this
}],
//列模式
colModel:new Ext.grid.ColumnModel([{
align:'center',
header:'用户名',
dataIndex:'UName',
menuDisabled:true
},{
align:'center',
header:'真实姓名',
dataIndex:'UTrueName',
menuDisabled:true
},{
align:'center',
header:'密码',
dataIndex:'UPassword',
menuDisabled:true
}]),
//数据源,此处使用的是Json数据源
store:new Ext.data.JsonStore({
autoLoad:true,
proxy:new Ext.data.HttpProxy({//使用代理获取服务器上的数据
url:UserListGridPanel.ACT_URL
}),
fields:['UId','UName','UTrueName','UPassword']
}),
loadMask:{msg:'数据加载中...'},
//选择模式
selModel:new Ext.grid.RowSelectionModel({
singleSelect:true,//只可单选
listeners:{
'rowselect':{
fn:function(sel,index,r){
this.fireEvent('rowselect',r);
},
scope:this
}
}
})
});
this.insertWin.on('submit',this.onInsertWinSubmit,this);
this.updateWin.on('submit',this.onUpdateWinSubmit,this);
this.addEvents('rowselect');
},
getSelected:function(){
var sm = this.getSelectionModel();
if(sm.getCount() == 0)
throw Error('您尚未选中任何人员记录!');
return sm.getSelected();
},
insert:function(r){
this.getStore().add(r);
},
update:function(r){
//更改本地数据
var sr = this.getSelected();
for(var i in sr.data){
sr.set(i,r.get(i));
}
//提交更改
sr.commit();
},
//使用AJAX方式删除数据库及数据列表中的选中数据
remove:function(){
try{
var rc = this.getSelected();
Ext.Ajax.request({
url:'user.do?action=delUser',
params:rc.data
});
this.getStore().remove(rc);
}catch(err){
Ext.Msg.alert('警告',err.description);
}
},
onInsertWinSubmit:function(win,r){
//向列表中插入新数据
this.insert(r);
},
onUpdateWinSubmit:function(win,r){
//修改列表中选中的数据
this.update(r);
}
});
//将与服务器交互的URL提取出来,方便后期维护
UserListGridPanel.ACT_URL ='user.do?action=getList';

通过写这个,我发现写JS真的是要非常非常的细心啊,由于没有相关的开发工具,写的时候也没什么提示,经常会因为一个逗号,分号,字母顺序啦什么的这些搞砸了。写的时候就一定要注意,否则写完后发现没法运行,这类问题很难查出来。

Ext GridPanel实例代码

2009.02.19 / 标签: / 分类: ExtJS

一段Ext中的GridPanel组件的实例代码。目前只有数据的读取(通过访问user.do?action=getlist),而数据的增加、修改及删除等操作都是本地的,没有对数据库进行操作。目前还有一点点小BUG,表单虽然使用了allowBlan:false,但是当点确定提交时还是会被提交。具体原因目前还没找出来,下来再慢慢找吧。

UserInfoFormPanel = Ext.extend(Ext.form.FormPanel,{
constructor:function(){
UserInfoFormPanel.superclass.constructor.call(this,{
frame:true,
autoHeight:true,
baseCls:'x-plain',
defaultType:'textfield',
defaults:{allowBlank:false},
labelWidth:55,
items:[{
fieldLabel:'用户名',
blankText:'用户名不能为空!',
name:'UName'
},{
fieldLabel:'真实姓名',
blankText:'真实姓名不能为空!',
name:'UTrueName'
},{
fieldLabel:'密码',
blankText:'密码不能为空!',
name:'UPassword'
}]
});
},
getValues:function(){
return new Ext.data.Record(this.getForm().getValues());
},
setValues:function(r){
this.getForm().loadRecord(r);
},
reset:function(){
this.getForm().reset();
}
});
/****************************************************************************/
UserInfoWindow = Ext.extend(Ext.Window,{
form:null,
constructor:function(){
this.form = new UserInfoFormPanel();
UserInfoWindow.superclass.constructor.call(this,{
renderTo:Ext.getBody(),
plain:true,
autoHeight:true,
width:250,
items:this.form,
buttonAlign:'center',
closeAction:'hide',
modal:true,
buttons:[{
text:'确定',
handler:this.onSubmitClick,
scope:this
},{
text:'取消',
handler:this.onCancelClick,
scope:this
}]
});
this.addEvents('submit');
},
close:function(){
this.form.reset();
this.hide();
},
onSubmitClick:function(){
this.fireEvent('submit',this,this.form.getValues());
this.close();
},
onCancelClick:function(){
this.close();
}
});
/****************************************************************************/
InsertUserInfoWindow = Ext.extend(UserInfoWindow,{
title:'添加人员'
});
/****************************************************************************/
UpdateUserInfoWindow = Ext.extend(UserInfoWindow,{
title:'修改人员',
load:function(r){
this.form.setValues(r);
}
});
/****************************************************************************/
UserListGridPanel = Ext.extend(Ext.grid.GridPanel,{
insertWin:new InsertUserInfoWindow(),
updateWin:new UpdateUserInfoWindow(),
constructor:function(){
UserListGridPanel.superclass.constructor.call(this,{
renderTo:Ext.getBody(),
width:300,
autoHeight:true,
autoWidth:true,
tbar:[{
text:'添加人员',
handler:function(){
this.insertWin.show();
},
scope:this
},'-',{
text:'修改人员',
handler:function(){
this.updateWin.show();
try{
this.updateWin.load(this.getSelected());
}catch(err){
Ext.Msg.alert('系统提示',err.description);
this.updateWin.close();
}
},
scope:this
},'-',{
text:'删除人员',
handler:function(){
Ext.Msg.confirm('警告','删除是不可逆的,是否确定删除?',function(btn){
if(btn == 'yes'){
this.remove();
}
},this);
},
scope:this
}],
//列模式
colModel:new Ext.grid.ColumnModel([{
align:'center',
header:'用户名',
dataIndex:'UName',
menuDisabled:true
},{
align:'center',
header:'真实姓名',
dataIndex:'UTrueName',
menuDisabled:true
},{
align:'center',
header:'密码',
dataIndex:'UPassword',
menuDisabled:true
}]),
//数据源,此处使用的是Json数据源
store:new Ext.data.JsonStore({
autoLoad:true,
proxy:new Ext.data.HttpProxy({//使用代理获取服务器上的数据
url:UserListGridPanel.DATA_URL
}),
fields:['UId','UName','UTrueName','UPassword']
}),
//选择模式
selModel:new Ext.grid.RowSelectionModel({
singleSelect:true,//只可单选
listeners:{
'rowselect':{
fn:function(sel,index,r){
this.fireEvent('rowselect',r);
},
scope:this
}
}
})
});
this.insertWin.on('submit',this.onInsertWinSubmit,this);
this.updateWin.on('submit',this.onUpdateWinSubmit,this);
this.addEvents('rowselect');
},
getSelected:function(){
var sm = this.getSelectionModel();
if(sm.getCount() == 0)
throw Error('您尚未选中任何人员记录!');
return sm.getSelected();
},
insert:function(r){
this.getStore().add(r);
},
update:function(r){
var sr = this.getSelected();
for(var i in sr.data){
sr.set(i,r.get(i));
}
sr.commit();
},
remove:function(){
try{
this.getStore().remove(this.getSelected());
}catch(err){
Ext.Msg.alert('警告',err.description);
}
},
onInsertWinSubmit:function(win,r){
this.getStore().add(r);
},
onUpdateWinSubmit:function(win,r){
this.update(r);
}
});
UserListGridPanel.DATA_URL ='user.do?action=getList';

昨天在用MyEclipse写东西的时候突然停电了,半小时后来电了,打开电脑,写了一天的代码全没了,代码文件的大小都没变,但是打开之后有的全显示“0”,有的则一片空白,差点没哭出来…~~~~(>_<)~~~~

EXTJS以POST请求APS.NET程序

2008.11.03 / 标签: / 分类: ExtJS
Sofa

今天在写一个EXTJS的登陆窗口的时候遇到了点问题:怎么在ASPX文件中获取Ext.Ajax以POST方式发送过来的数据呢?


当前我用EXTJS构建的表单代码如下:

 
  1. <link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" /> 
  2.     <script type="text/javascript" src="ext/ext-base.js"></script> 
  3.     <script type="text/javascript" src="ext/ext-all.js"></script> 
  4. <script type="text/javascript">
  5. Ext.onReady(function(){
  6.     var myForm = new Ext.form.FormPanel({
  7.         title:"管理登录",
  8.         renderTo:Ext.getBody(),
  9.         width:250,
  10.         frame:true,
  11.         url:"Get.aspx",
  12.         listeners:{
  13.             "actioncomplete":function(form,action){
  14.                 var result = action.response.responseText;
  15.                 if(result == "y"){
  16.                     alert(this.xtype);
  17.                 }
  18.             }
  19.         },
  20.         errorReader:new Ext.data.XmlReader({record:""},[]),
  21.         items:[{
  22.             layout:"form",
  23.             xtype:"panel",
  24.             labelWidth:50,
  25.             baseCls:"x-plain",
  26.             defaultType:"textfield",
  27.             defaults:{allowBlank:false},
  28.             style:"padding:4px",
  29.             items:[{
  30.                 fieldLabel:"用户名"
  31.             },{
  32.                 inputType:"password",
  33.                 fieldLabel:"密&nbsp;&nbsp;&nbsp;码"
  34.             }]
  35.         }],
  36.         buttons:[{
  37.                 text:"确定",
  38.                 handler:function(){
  39.                     this.ownerCt.getForm().submit();
  40.                 }
  41.             },{
  42.                 text:"重置",
  43.                 handler:function(){    
  44.                     this.ownerCt.getForm().reset()
  45.                 }
  46.             }]
  47.     });    
  48. });
  49. </script>
ontenteditable="false" style="display: none">
<link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" />     <script type="text/javascript" src="ext/ext-base.js"></script>     <script type="text/javascript" src="ext/ext-all.js"></script> <script type="text/javascript">Ext.onReady(function(){    var myForm = new Ext.form.FormPanel({        title:"管理登录",        renderTo:Ext.getBody(),        width:250,        frame:true,        url:"Get.aspx",        listeners:{            "actioncomplete":function(form,action){                var result = action.response.responseText;                if(result == "y"){                    alert(this.xtype);                }            }        },        errorReader:new Ext.data.XmlReader({record:""},[]),        items:[{            layout:"form",            xtype:"panel",            labelWidth:50,            baseCls:"x-plain",            defaultType:"textfield",            defaults:{allowBlank:false},            style:"padding:4px",            items:[{                fieldLabel:"用户名"            },{                inputType:"password",                fieldLabel:"密&nbsp;&nbsp;&nbsp;码"            }]        }],        buttons:[{                text:"确定",                handler:function(){                    this.ownerCt.getForm().submit();                }            },{                text:"重置",                handler:function(){                        this.ownerCt.getForm().reset()                }            }]    });    });</script>

一直以来都是直接点击按钮在其事件中使用this.txtUserName.text的方式获取页面中的数据的,如果是URL重写方式传值(即GET),那么就用Request.QueryString["id"]来获取,可是如果是POST方式呢?POST方式的取值方法我只是隐约见过,于是百度了一下得到答案:
使用Request["userName"]来获取POST表单中的值,方括号中的userName是表单中对应项的ID。
至此就要对前面写的EXTJS稍加修改了,修改后的代码如下:

 
  1. <link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" /> 
  2.     <script type="text/javascript" src="ext/ext-base.js"></script> 
  3.     <script type="text/javascript" src="ext/ext-all.js"></script> 
  4. <script type="text/javascript">
  5. Ext.onReady(function(){
  6.     var myForm = new Ext.form.FormPanel({
  7.         title:"管理登录",
  8.         renderTo:Ext.getBody(),
  9.         width:250,
  10.         frame:true,
  11.         url:"Get.aspx",
  12.         listeners:{
  13.             "actioncomplete":function(form,action){
  14.                 var result = action.response.responseText;
  15.                 if(result == "y"){
  16.                     alert(this.xtype);
  17.                 }
  18.             }
  19.         },
  20.         errorReader:new Ext.data.XmlReader({record:""},[]),
  21.         items:[{
  22.             layout:"form",
  23.             xtype:"panel",
  24.             labelWidth:50,
  25.             baseCls:"x-plain",
  26.             defaultType:"textfield",
  27.             defaults:{allowBlank:false},
  28.             style:"padding:4px",
  29.             items:[{
  30.                 id:"name",
  31.                 fieldLabel:"用户名"
  32.             },{
  33.                 id:"pwd" >,
  34.                 inputType:"password",
  35.                 fieldLabel:"密&nbsp;&nbsp;&nbsp;码"
  36.             }]
  37.         }],
  38.         buttons:[{
  39.                 text:"确定",
  40.                 handler:function(){
  41.                     this.ownerCt.getForm().submit();
  42.                 }
  43.             },{
  44.                 text:"重置",
  45.                 handler:function(){    
  46.                     this.ownerCt.getForm().reset()
  47.                 }
  48.             }]
  49.     });    
  50. });
  51. </script>

不细看的话是看不出来代码的变化的…呵呵~

ConfirmButtonExtender控件

2008.10.20 / 标签: ,, / 分类: ASP.NET
Sofa

5步就能学会使用这个ConfirmButtonExtender控件,半个代码都不需要你手动去写,微软出品的东西总是简单易用,貌似完全把使用者当白痴对待,汗~
 
1.在ASP.NET AJAX-Enabled Web Site中新建一个ConfirmButton.aspx文件。
2.拖入一个ScriptManager和一个UpdatePanel。
3.向UpdatePanel中拖入一个Button控件和一个ConfirmButtonExtender控件。
4.修改ConfirmButtonExtender控件的TargetControlID属性为Button的ID。
5.修改Button的ConfirmText属性,输入一段信息:尼克技术博客http://www.ineeke.com欢迎您光临!这段信息将在弹出的窗口中显示。
现在这个AJAX效果已经做好了,运行这个程序,单击一下Button就能看到效果了。不过这个效果用不着这么麻烦吧,微软是不是脑子秀逗了,完全可以直接用JavaScript弹的嘛!

安装ASPAJAXExtSetup及AjaxControlToolkit

2008.10.18 / 标签: / 分类: ASP.NET
Sofa

开始学习ASP.NET的AJAX控件了,不过默认安装的VS2005上是没有这个控件库的,需要我们自己手动安装。

1,下载并安装 ASPAJAXExtSetup.msi

http://download.microsoft.com/download/5/4/6/5462bcbd-e738-45fa-84ca-fa02b0c4e1c2/ASPAJAXExtSetup.msi
下载完 ASPAJAXExtSetup.msi 安装更新后在你的系统盘下的(以C盘为例)出现这个文件夹: 
C:\Program Files\Microsoft asp.NET\ASP.NET 2.0 ajax Extensions\v1.0.61025

安装这个后我们就可以创建Asp.net AJAXEnabledWebSite站点了,这其实就是个ajax.net网站的模板。但是我们现在还不能使用微软给我们开发好的ajax控件。

2,下载AjaxControlToolkit

http://www.codeplex.com/AjaxControlToolkit/Release/ProjectReleases.aspx?ReleaseId=11121
有带源代码的和不带源代码的toolkit。下载完成后把该文件解压到:

C:\Program Files\Microsoft asp.NET\ASP.NET 2.0 ajax Extensions\v1.0.61025\AjaxContronlToolkit\

双击运行AjaxControlToolkit.sln。

用vs2005 打开这个sln,编译TemplateVSI这个项目后,把在C:\Program Files\Microsoft asp.NET\ASP.NET 2.0 AJAX Extensions\SampleWebSite\Bin下面生成的AjaxControlToolkit.dll和 AjaxControlToolkit.pdb复制到

C:\Program Files\Microsoft asp.NET\ASP.NET 2.0 AJAX Extensions\Binaries文件夹下面,这样我们就可以在vs2005中使用ajax.net这些控件了。

新建一个Ajax ControlToolkitWebSite 类型的web项目。在工具栏中新添加一个选项卡起名:AjaxControltoolkit

在这个选项卡上右键选择项->浏览找到刚才复制过去的AjaxControlToolkit.dll,添加进来。这样我们就ajax.net控件成功引用到vs2005中了 。

ajax学习3之获取XML文档信息

2008.05.11 / 标签: / 分类: ExtJS
Sofa

进入本人ajax学习第三课,使用ajax获取XML文档中信息。效果图以下是HTML部分的代码:

<html>
<
head>
<
title>ajax 3</title>
<
script type="text/javascript">
var xmlHttp;
var requestType="";

function createXMLHttpRequest(){
  
if(window.ActiveXObject){
    
xmlHttp new ActiveXObject("Microsoft.XMLHTTP");
  }
else if(window.XMLHttpRequest){
    
xmlHttp new XMLHttpRequest();
  }
}

function startRequest(requestedList){

  requestType requestedList;
  
createXMLHttpRequest();
  
xmlHttp.onreadystatechange handleStateChange;
  
xmlHttp.open("GET","paresXML.xml",true);
  
xmlHttp.send(null);
}

function handleStateChange(){

  if(xmlHttp.readyState == 4){
    
if(xmlHttp.status == 200){
      
if(requestType == "north"){
        
listNorthStates();
      }
else if(requestType == "all" ont style="font: 10pt Fixedsys; color: #0a246a">){
      
        listAllStates();
      }
    }
  }
}

function listNorthStates(){

  var xmlDoc xmlHttp.responseXML;
  
var northNode xmlDoc.getElementsByTagName("north")[0];
  
var out "Northern States";
  
var northStates northNode.getElementsByTagName("state");
  
  
outputList("Northern States",northStates);
}

function listAllStates(){

  var xmlDoc xmlHttp.responseXML;
  
var allStates xmlDoc.getElementsByTagName("state");
  
  
outputList("All States in Document",allStates)
}

function outputList(title,states){

  var out title;
  
var currentState null;
  
for(var states.lengthi++){
  
    
currentState states[i];
    
out out+"\n"+currentState.childNodes[0
].nodeValue;
    
alert(out);
  }
}
</
script>
</
head>
<
body>
<
input type="button" value="查看所有" onclick="startRequest('all')" /><br />
<
input type="button" value="查看north" onclick="startRequest('north')" />
</
body>
</
html>

以下是XML文件代码:

<?xml version="1.0" encoding="UTF-8"?>
<states>
  <north>
    <state>
Minnesota</state>
    <state>
Iowa</state>
    <stae>
North Dakota</stae>
  </north>
  <south>
    <state>
Texas</state>
    <state>
Oklahoma</state>
    <state>
Louisiana</state>
  </south>
  <east>
    <state>
New York</state>
    <state>
North Carolina</state>
    <state>
Massachusetts</state>
  </east>
  <west>
    <state>
California</state>
    <state>
Oregon</state>
    <state>
Nevad</state>
  </west>
</states>

首先listAllStates函数创建了一个局部变量xmlDoc,并将这个变量初始化设置为服务器返回的XML文档,这个XML文档是使用XMLHttpRequest对象的responseXML属性得到的。利用XML文档的getElementsByTagName方法可以获取文档中所有标记名为state的元素。getElementsByTagName方法返回了包含所有state元素的数组,这个数组将付给名为allStates得局部变量。从XML文档获取了所有state元素之后,listAllStates函数调用outputList函数并在警告框中显示这些state元素。listAllStates方法将迭代处理state元素的数组,将各各元素的响应州名逐个追加到一个串中,这个串最后将显示在警告框中。 outputList函数迭代处理数组中的所有元素,将当前元素赋给currentState变量。因为表示州名的文本元素总是state元素的第一个子元素,所以可以使用chinldNodes属性来得到文本元素。 listNorthStates函数与listAllStates函数是类似的,唯一不同的是它使用了getElementsByTagName方法获得north标记,从而获得XML文档中的north元素。因为文档只包含一个north元素,而且getElementsByTagName方法总是返回一个数组,所以用[0]下标来抽取north元素。注:此ajax学习资料来自 方正apabi联盟制作的《ajax基础教程》译自:《Founations of Ajax》

ajax实现搜索

2008.05.09 / 标签: / 分类: ExtJS
Sofa

本例具体步骤如下(这里并没有真正的搜索什么,而是仅仅用于学习测试,希望自己将来能够写出来吧): 1.点击search按钮,调用startSearch函数,该函数先调用createXMLHttpRequest函数来初始化XMLHttpRequest对象的一个新实例。 2.startSearch函数将回调函数设置为handleStateChange函数。 3.startSearch函数使用opne()方法来设置请求方法(GET)及请求目标,并且设置为异步的完成请求。 4.使用XMLHttpRequest对象的内部状态每次有变化时,都会调用handleStateChange函数。一旦接收到响应(如果readyState属性的值为4),div元素的innerHTML属性就将使用XMLHttpRequest对象的responseText属性设置。 index.html具体代码如下:

<script language="javascript">
var xmlHttp;
function createXMLHttpRequest(){
    
if(window.ActiveXObject){
        
xmlHttp new ActiveXObject("Microsoft.XMLHTTP");
    }
else if(window.XMLHttpRequest){
        
xmlHttp new XMLHttpRequest();
    }
}

function startSearch(){
    
createXMLHttpRequest();
    
xmlHttp.onreadystatechange handleStateChange;
    
xmlHttp.open("GET","innerHTML.xml",true);
    
xmlHttp.send(null);
}

function handleStateChange(){
    
if(xmlHttp.readyState == 4){
        
if(xmlHttp.status == 200){
            
            
document.getElementById("result").innerHTML xmlHttp.responseText;
        }
    }
}
</
script><input type="button" onclick="startSearch()" value="

无觅相关文章插件,快速提升流量