如何实现通过回车键提交表单

对于B/S的系统,在页面控制上不如C/S系统那么控制灵活,就比如现在一个页面或用户控件里有两个按钮button1和button2,两个文本框Textbox1和Textbox2,当您想控制当焦点在Textbox1时回车提交button1,在Textbox2时提交button2,这个时候就需要通过客户端脚本来实现和服务器端控件的交互,这是我写的封装好的类,
控件继承 TextBox,SubmitControl属性用来指定此文本框上按回车时由哪个按钮来响应。
 SubmitableControlConvertor增加设计时支持,就是在设计时可以用下拉框选择提交按钮。
目前只考虑了Button、LinkButton和ImageButton作为提交按钮,当然继承它们的控件也可以。

 1  using  System;
 2  using  System.Web.UI;
 3  using  System.Web.UI.WebControls;
 4  using  System.ComponentModel;
 5 
 6  namespace  MyCompany.Controls
 7  {
 8       public   class  SubmitTextBox : TextBox
 9      {
10           ///   <summary>
11           ///  用来指定按回车时由哪个按钮来响应
12           ///   </summary>
13          [TypeConverter( typeof (SubmitableControlConvertor)), DefaultValue( "" ),Category( " Behavior " )]
14           public   string  SubmitControl
15          {
16               get
17              {
18                   object  ret  =   this .ViewState[ " SubmitControl " ];
19                   if  (ret  !=   null )
20                  {
21                       return  ( string ) ret;
22                  }
23                   return   string .Empty; 
24              } 
25               set  
26              {
27                   this .ViewState[ " SubmitControl " =  value;
28              }
29          }
30 
31           protected   override   void  AddAttributesToRender(HtmlTextWriter writer) 
32          {
33               base .AddAttributesToRender(writer);
34               if ( this .SubmitControl.Length  >   0 )
35              {
36                  Control con  =  FindControl(SubmitControl);
37                   if (con  !=   null )
38                  {
39                       string  script  =   " if(event.keyCode == 13){document.getElementById(' "   +  con.ClientID  +   " ').click();event.returnValue=false;} " ;
40                      writer.AddAttribute( " onkeydown " ,script);
41                  }
42              }
43          } 
44      } 
45  }

 1  using  System;
 2  using  System.Web.UI;
 3  using  System.Web.UI.WebControls;
 4  using  System.ComponentModel;
 5  using  System.Collections;
 6 
 7  namespace  MyCompany.Controls
 8  {
 9       public   class  SubmitableControlConvertor : StringConverter
10      {
11           private   object [] GetControls(IContainer container)
12          {
13              ComponentCollection components  =  container.Components;
14              ArrayList ret  =   new  ArrayList();
15               foreach  (IComponent control  in  components)
16              {
17                   if  ( ! (control  is  Button  ||  control  is  LinkButton  ||  control  is  ImageButton))
18                  {
19                       continue ;
20                  }
21                  Control button  =  (Control) control;
22                   if  ((button.ID  !=   null &&  (button.ID.Length  !=   0 ))
23                  {
24                      ret.Add( string .Copy(button.ID));
25                  }
26              }
27              ret.Sort(Comparer.Default);
28               return  ret.ToArray();
29          }
30   
31           public   override  System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
32          {
33               if  ((context  !=   null &&  (context.Container  !=   null ))
34              {
35                   object [] controls  =   this .GetControls(context.Container);
36                   if  (controls  !=   null )
37                  {
38                       return   new  TypeConverter.StandardValuesCollection(controls);
39                  }
40              }
41               return   null ;
42          }
43 
44           public   override   bool  GetStandardValuesExclusive(ITypeDescriptorContext context)
45          {
46               return   false ;
47          }
48 
49           public   override   bool  GetStandardValuesSupported(ITypeDescriptorContext context)
50          {
51               return   true ;
52          }
53      } 
54  }

在页面上只需要象下面这样调用就可以:
1  <% @ Control Language = " c# " %>
2  <% @ Register TagPreFix = " MyCompany "  Namespace = " MyCompany.Controls "  Assembly = " MyCompany.Controls " %>
3  < MyCompany:SUBMITTEXTBOX  id ="txtKeys"  SubmitControl ="btnSearch"   runat ="server"   maxlength ="20"  Value ="请输入搜索关键字"  onfocus ="if(this.value=='请输入搜索关键字')this.value='';"  onblur ="if(this.value=='')this.value='请输入搜索关键字'" ></ MyCompany:SUBMITTEXTBOX > &nbsp;&nbsp;&nbsp; < asp:imagebutton  id ="btnSearch"  runat ="server" ></ asp:imagebutton >

 

http://yangxiangwu.cnblogs.com/archive/2006/05/09/394991.html

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值