asp.net表单回车提交的问题,设置默认按钮

有asp.net里面用了form runat=server的表单的时候,里面的<asp:button .. 总不能按个回车提交表单,很是不爽。

现在终于发现了一个属性可以干这个事情,用 this.Form.DefaultButton = "ContentPlaceHolder1$btsubmit";
值得注意的是,如果用了masterPage(母板页),那么要在按钮ID前加上母板的ID:ContentPlaceHolderID和一个美元符($)

代码如下:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="login.aspx.cs" Inherits="login" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:TextBox runat="server" ID="wd" ></asp:TextBox><asp:Button ID="btsubmit" runat="server" Text="提交" OnClick="btsubmit_Click" />
...........................
</asp:Content>

含母板页的类中:
protected void Page_Load(object sender, EventArgs e)
{
this.Form.DefaultButton = "ContentPlaceHolder1$btsubmit";
}

非母板页的类中:

protected void Page_Load(object sender, EventArgs e)
{
this.Form.DefaultButton = "btsubmit";
}

---------------------------------------------------另一种办法是做一个控件-----------------------------------------------------------

大家都知道。如何页面只有一个按钮的话。按回车的话。是可以提交的。此时的做法也非常简单。在click中直接写代码就可以了。页面在提交时,它黓认是提交第一个控件的。所以。我在页面的最上面放一个长宽都为0的服务器按钮button1。然在在button1_onclick()中写要提交的代码就可以了。运行时,你按下回车提交。这时页面提交的就是button1的事件了。哈!是不是很简单!

缺点:

不用我说了,每个页面只能存在一个回车提交的事件。

---------------------------------------------------另一种办法是做一个控件-----------------------------------------------------------
自己写一个控件继承TextBox,增加一个SubmitControl 属性用来指定此文本框上按回车时由哪个按钮来响应。
  再做一个Converter增加设计时支持,就是在设计时可以用下拉框选择提交按钮。
  目前只考虑了Button、LinkButton和ImageButton作为提交按钮,当然继承它们的控件也可以。
  本例知识点:控件、属性、继承。
  继承:是一个进程,通过继承,一个对象可以获得另一个对象的属性(包括函数),并可向其中加入属于自己的一些特征。作为C++语言的一种重要机制,用继承的方法可以自动为一个类提供来自另一个类的操作和数据结构,进而使程序设计人员在一个一般的类的基础上很快建立一个新的类,而不必从零开始设计每个类。
  当一个类被其他的类继承时,被继承的类称为基类,又称为父类。
  继承其他类属性的类称为派生类,又称为子类。
  一般情况下,继承的进程起源于一个基类的定义,基类定义了其所有派生类的公有属性。从本质上讲,基类具有同一类集合中的公共属性,派生类继承了这些属性,并且增加了自己特有的属性。从任何已存在的类继承的实质就是建造新的派生类。
  实现过程
  1)先创建一个新项目WEB控件库,将此段代码加进去。
  public class ufoTextBox :TextBox
  {
  [TypeConverter(typeof(SubmitableControlConvertor)),DefaultValue(""),Category("Behavior")]
  public string SubmitControl
  {
  get
  {
  object ret = this.ViewState["SubmitControl"];
  if (ret != null)
  {
  return (string) ret;
  }
  return string.Empty;
  }
  set
  {
  this.ViewState["SubmitControl"] = value;
  }
  }
  protected override void AddAttributesToRender(HtmlTextWriter writer)
  {
  base.AddAttributesToRender(writer);
  if(this.SubmitControl.Length >0)
  {
  Control con = FindControl(SubmitControl);
  if(con != null)
  {
  string script = "if(event.keyCode == 13){document.getElementById('" + con.ClientID + "').click();event.returnValue=false;}";
  writer.AddAttribute("onkeydown",script);
  }
  }
  }
  }
  自定义的Converter,用于设计时支持:
  public class SubmitableControlConvertor :StringConverter
  {
  private object[] GetControls(IContainer container)
  {
  ComponentCollection components = container.Components;
  ArrayList ret = new ArrayList();
  foreach (IComponent control in components)
  {
  if (!(control is Button control is LinkButton control is ImageButton))
  {
  continue;
  }
  Control button = (Control) control;
  if ((button.ID != null) &&(button.ID.Length != 0))
  {
  ret.Add(string.Copy(button.ID));
  }
  }
  ret.Sort(Comparer.Default);
  return ret.ToArray();
  }
  publicoverrideSystem.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
  {
  if ((context != null) &&(context.Container != null))
  {
  object[] controls = this.GetControls(context.Container);
  if (controls != null)
  {
  return new TypeConverter.StandardValuesCollection(controls);
  }
  }
  return null;
  }
  public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
  {
  return false;
  }
  public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
  {
  return true;
  }
  }
  2)将此文件生成.dll文件,在工具箱中添加此dll文件。
  3)将此控件拖入相应页面,在Page_Load中加上[此控件的名字].SubmitControl="所提交的按钮的名字";
  例如:
  WebCustomControl1.SubmitControl="Button1"(双引号不要去掉了!)
  当往WebCustomControl1输入完内容之后按回车Button1响应。
 

时间: 2024-12-30 01:31:48

asp.net表单回车提交的问题,设置默认按钮的相关文章

ASP如何利用XMLHTTP实现表单的提交以及cookies或session的发送和Referer

cookie|cookies|session|xml 利用XMLHTTP来制作小偷的具体细节落伍很多人都发过和讨论过了,但是在制作ASP小偷的过程中,很多人就发现ASP小偷不如PHP小偷的那么强 大了.确实,如果在原网站如果存在表单提交或cookies的验证,对于ASP来说,不使用基于SOCKET的组件就难以完成,其实,XMLHTTP的另外两 个方法被我们忽略了,而这正是问题的关键.下面首先来说说这个方法1..send()由于流行的小偷是使用的GET而不是POST来传送数据,所以很多人忽略了这个

ASP小偷程序如何利用XMLHTTP实现表单的提交以及cookies或session的发送

cookie|cookies|session|xml|程序|小偷程序 利用XMLHTTP来制作小偷的具体细节落伍很多人都发过和讨论过了,但是在制作ASP小偷的过程中,很多人就发现ASP小偷不如PHP小偷的那么强 大了.确实,如果在原网站如果存在表单提交或cookies的验证,对于ASP来说,不使用基于SOCKET的组件就难以完成,其实,XMLHTTP的另外两 个方法被我们忽略了,而这正是问题的关键.下面首先来说说这个方法1..send()由于流行的小偷是使用的GET而不是POST来传送数据,所以

ASP中一个页面多个表单的提交

页面 做网页有时我们需要将多个表单方在同一个页面处理表单的程序页怎样才知道那个表单被提交了并作相应的处理呢?下面是一个例子: '''''''''''''''''''''form.asp <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%><script language="vbscript" runat="server">sub chuli()if request.QueryS

ASP小偷程序如何利用XMLHTTP实现表单的提交_AJAX相关

[原创]ASP小偷程序如何利用XMLHTTP实现表单的提交以及cookies或session的发送 利用XMLHTTP来制作小偷的具体细节落伍很多人都发过和讨论过了,但是在制作ASP小偷的过程中,很多人就发现ASP小偷不如PHP小偷的那么强 大了.确实,如果在原网站如果存在表单提交或cookies的验证,对于ASP来说,不使用基于SOCKET的组件就难以完成,其实,XMLHTTP的另外两 个方法被我们忽略了,而这正是问题的关键. 下面首先来说说这个方法 1..send() 由于流行的小偷是使用的

ASP小偷程序如何利用XMLHTTP实现表单的提交

[原创]ASP小偷程序如何利用XMLHTTP实现表单的提交以及cookies或session的发送 利用XMLHTTP来制作小偷的具体细节落伍很多人都发过和讨论过了,但是在制作ASP小偷的过程中,很多人就发现ASP小偷不如PHP小偷的那么强 大了.确实,如果在原网站如果存在表单提交或cookies的验证,对于ASP来说,不使用基于SOCKET的组件就难以完成,其实,XMLHTTP的另外两 个方法被我们忽略了,而这正是问题的关键. 下面首先来说说这个方法 1..send() 由于流行的小偷是使用的

js防止表单重复提交

在表单提交的时候,用户有时候会重复的点击提交按钮,会导致多次提交,产生重复数据.我们应该怎么办了?一般想法是:通过attachEvent在 form的onsubmit事件中写一个方法,每次触发该事件时执行该方法,我们可以给form增加一个submited属性,每次判断这个属性,为 false的时候继续提交表单并且设置form.submited=true,反之说明表单已经提交,就不再提交表单.      但是,出现问题了:提交表单一般有三种方式 <form action=xxx.aspx onsu

轻松玩转花样表单(三)表单的提交

三.表单的提交 既然表单是用来采集用户输入的数据,那么,就应该保证用户的数据被准确地提交到预定的地点,也就是说,我们在表单提交的时候,应该对用户的数据进行检验,一来可以避免用户误输数据,二来可以避免用户输入非法的,或者说不合格的数据:检验合格以后,还要保证用户的数据提交到特定的程序. 1.数据的检验 数据的检验,通常有两种程序:客户端检验和服务器端检验.客户端检验,比较快,服务器端检验,相对来说比较慢,为了确保安全,通常同时采用,这样就可以避免用户刻意破坏. 不管采用什么方式,数据检验的原理都是

表单的提交方式POST和GET有什么区别

区别 表单的提交方式POST和GET有什么区别 ? 解决思路:    两者的区别需要通过提交表单后才看得出来,主要是在数据发送方式和接收方式上. 具体步骤: Post和Get都是表单属性Method的可选值,Method的默认值为Get,两者的主要区别在于: 1.在客户端,Get方式在通过URL提交数据,提交后在地址栏中的地址如图1.4.3所示. 图1.4.3 Get方式提交表单后的地址栏 而Post提交后地栏不变,如图1.4.4所示. 图1.4.4 Post方式提交表单后的地址栏不变 2.在服

服务器-表单无法提交像dos界面的那样

问题描述 表单无法提交像dos界面的那样 ![ 解决方案 处理Html表单应该用server(比如apcache或iis或ngix)+cgi(asp/php等), 要用原始tcp socket的话,必须自己实现一个http server(也就是实现apcahe/nigix的逻辑,当然可以实现的很简单) 解决方案二: 问题都描述不清楚,叫人怎么答? 网页的form是用http协议提交数据,也就是TCP协议,你这serversocker是什么? 理论上 你在本机开一个tcp端口,然后用网页提交过去是