日期:2010-02-21  浏览次数:20525 次


现在终于发现了一个属性可以干这个事情,用 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();
  }
  publicoverrideSys