第1种方法:

就是在Asp.net的页面中找到

 <form id="form1" runat="server" defaultbutton="Ok">

设置form的属性 defaultbutton=“默认按钮ID”

这个是我在VS2005中式的,不知道2003中是吗







第2种方法:



ASP.NET 中由于一个页面只有 Form ,经常碰到的一个问题是当在一个文本框中按回车后确不知哪个按钮被当成提交按钮提交了,非常郁闷!!!特别是在有用户控件时,搞得都不敢用 Validator 。

今天实在任不住把它搞定,其实也不麻烦。

基本思路:

自己写一个控件继承 TextBox,增加一个 SubmitControl 属性用来指定此文本框上按回车时由哪个按钮来响应。

再做一个 Converter 增加设计时支持,就是在设计时可以用下拉框选择提交按钮。

目前只考虑了  Button、LinkButton和ImageButton作为提交按钮,当然继承它们的控件也可以。


代码很少,就直接贴在这儿了。


ufoTextBox 控件:

Asp.net设置默认按钮的方法总结_ide    public class ufoTextBox : TextBox

Asp.net设置默认按钮的方法总结_ide_02Asp.net设置默认按钮的方法总结_ide_03    Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05        [TypeConverter(typeof(SubmitableControlConvertor)), DefaultValue(""),Category("Behavior")]

Asp.net设置默认按钮的方法总结_默认按钮_05        public string SubmitControl

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08        Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05            get

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08            Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05                object ret = this.ViewState["SubmitControl"];

Asp.net设置默认按钮的方法总结_默认按钮_05                if (ret != null)

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08                Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05                    return (string) ret;

Asp.net设置默认按钮的方法总结_html_20                }

Asp.net设置默认按钮的方法总结_默认按钮_05                return string.Empty;

Asp.net设置默认按钮的方法总结_html_20            }

Asp.net设置默认按钮的方法总结_默认按钮_05            set

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08            Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05                this.ViewState["SubmitControl"] = value;

Asp.net设置默认按钮的方法总结_html_20            }

Asp.net设置默认按钮的方法总结_html_20        }

Asp.net设置默认按钮的方法总结_默认按钮_05

Asp.net设置默认按钮的方法总结_默认按钮_05        protected override void AddAttributesToRender(HtmlTextWriter writer)

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08        Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05            base.AddAttributesToRender(writer);

Asp.net设置默认按钮的方法总结_默认按钮_05            if(this.SubmitControl.Length > 0)

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08            Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05                Control con = FindControl(SubmitControl);

Asp.net设置默认按钮的方法总结_默认按钮_05                if(con != null)

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08                Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05                    string script = "if(event.keyCode == 13){document.getElementById('" + con.ClientID + "').click();event.returnValue=false;}";

Asp.net设置默认按钮的方法总结_默认按钮_05                    writer.AddAttribute("onkeydown",script);

Asp.net设置默认按钮的方法总结_html_20                }

Asp.net设置默认按钮的方法总结_html_20            }

Asp.net设置默认按钮的方法总结_默认按钮_05

Asp.net设置默认按钮的方法总结_html_20        }

Asp.net设置默认按钮的方法总结_默认按钮_51    }

自定义的 Converter,用于设计时支持:

Asp.net设置默认按钮的方法总结_ide    public class SubmitableControlConvertor : StringConverter

Asp.net设置默认按钮的方法总结_ide_02Asp.net设置默认按钮的方法总结_ide_03    Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05        private object[] GetControls(IContainer container)

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08        Asp.net设置默认按钮的方法总结_ide_04{

com%2Fimages%2Fblog%2F202108%2F08%2F0e223d78583f811fd9c0051f5ddf3ef9.gif%3Fx-oss-process%3Dimage%2Fwatermark%2Csize_16%2Ctext_QDUxQ1RP5Y2a5a6i%2Ccolor_FFFFFF%2Ct_100%2Cg_se%2Cx_10%2Cy_10%2Cshadow_90%2Ctype_ZmFuZ3poZW5naGVpdGk%3D%22%2C%22status%22%3A%22done%22%2C%22alt%22%3A%22%22%2C%22percent%22%3A0%2C%22size%22%3A%7B%22width%22%3A11%2C%22height%22%3A16%2C%22naturalWidth%22%3A11%2C%22naturalHeight%22%3A16%7D%2C%22id%22%3A%22lmNNc%22%7D" data-card-type="inline" data-card-key="image" data-card-loading="true" data-card-editable="false"> Asp.net设置默认按钮的方法总结_默认按钮_60             ComponentCollection components = container.Components;

Asp.net设置默认按钮的方法总结_默认按钮_05            ArrayList ret = new ArrayList();

com%2Fimages%2Fblog%2F202108%2F08%2F0e223d78583f811fd9c0051f5ddf3ef9.gif%3Fx-oss-process%3Dimage%2Fwatermark%2Csize_16%2Ctext_QDUxQ1RP5Y2a5a6i%2Ccolor_FFFFFF%2Ct_100%2Cg_se%2Cx_10%2Cy_10%2Cshadow_90%2Ctype_ZmFuZ3poZW5naGVpdGk%3D%22%2C%22status%22%3A%22done%22%2C%22alt%22%3A%22%22%2C%22percent%22%3A0%2C%22size%22%3A%7B%22width%22%3A11%2C%22height%22%3A16%2C%22naturalWidth%22%3A11%2C%22naturalHeight%22%3A16%7D%2C%22id%22%3A%22AWy7h%22%7D" data-card-type="inline" data-card-key="image" data-card-loading="true" data-card-editable="false"> Asp.net设置默认按钮的方法总结_默认按钮_60             foreach (IComponent control in components)

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08            Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05                if (!(control is Button || control is LinkButton || control is ImageButton))

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08                Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05                    continue;

Asp.net设置默认按钮的方法总结_html_20                }

Asp.net设置默认按钮的方法总结_默认按钮_05                Control button = (Control) control;

Asp.net设置默认按钮的方法总结_默认按钮_05                if ((button.ID != null) && (button.ID.Length != 0))

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08                Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05                    ret.Add(string.Copy(button.ID));

Asp.net设置默认按钮的方法总结_html_20                }

Asp.net设置默认按钮的方法总结_html_20            }

Asp.net设置默认按钮的方法总结_默认按钮_05            ret.Sort(Comparer.Default);

Asp.net设置默认按钮的方法总结_默认按钮_05            return ret.ToArray();

Asp.net设置默认按钮的方法总结_html_20        }

Asp.net设置默认按钮的方法总结_默认按钮_05 

Asp.net设置默认按钮的方法总结_默认按钮_05

Asp.net设置默认按钮的方法总结_默认按钮_05        public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08        Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05            if ((context != null) && (context.Container != null))

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08            Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05                object[] controls = this.GetControls(context.Container);

Asp.net设置默认按钮的方法总结_默认按钮_05                if (controls != null)

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08                Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05                    return new TypeConverter.StandardValuesCollection(controls);

Asp.net设置默认按钮的方法总结_html_20                }

Asp.net设置默认按钮的方法总结_html_20            }

Asp.net设置默认按钮的方法总结_默认按钮_05            return null;

Asp.net设置默认按钮的方法总结_html_20        }

Asp.net设置默认按钮的方法总结_默认按钮_05

Asp.net设置默认按钮的方法总结_默认按钮_05        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08        Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05            return false;

Asp.net设置默认按钮的方法总结_html_20        }

Asp.net设置默认按钮的方法总结_默认按钮_05

Asp.net设置默认按钮的方法总结_默认按钮_05        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)

Asp.net设置默认按钮的方法总结_控件_07Asp.net设置默认按钮的方法总结_默认按钮_08        Asp.net设置默认按钮的方法总结_ide_04{

Asp.net设置默认按钮的方法总结_默认按钮_05            return true;

Asp.net设置默认按钮的方法总结_html_20        }

Asp.net设置默认按钮的方法总结_默认按钮_51    }

没几行代码,自己看吧。



第3种方法:


由于asp.net里面的button都是submit类型的,所以在表单内按回车都是触发的第一个按钮的click事件,如果有多个button则无法在回车的时候触发后面的按钮事件。以下方案可通过设置来改变页面的默认按钮。


1.在基页面内的load事件里加入supportDefaultButton()


2.基页面中声明变量:

Protected DefaultButton As Button


3.在基页面中加入函数supportDefaultButton并重载RaisePostBackEvent Asp.net设置默认按钮的方法总结_ide_02Asp.net设置默认按钮的方法总结_ide_03    Private Sub supportDefaultButton()Sub supportDefaultButton()

Asp.net设置默认按钮的方法总结_默认按钮_05        GetPostBackEventReference(New System.Web.UI.Control)

Asp.net设置默认按钮的方法总结_默认按钮_05        RegisterStartupScript("DefaultButton", "<script language='javascript' src='/js/DefaultButton.js'></script>")

Asp.net设置默认按钮的方法总结_默认按钮_51    End Sub

Asp.net设置默认按钮的方法总结_ide

Asp.net设置默认按钮的方法总结_ide_02Asp.net设置默认按钮的方法总结_ide_03    Protected Overloads Overrides Sub RaisePostBackEvent()Sub RaisePostBackEvent(ByVal sourceControl As System.Web.UI.IPostBackEventHandler, ByVal eventArgument As String)

Asp.net设置默认按钮的方法总结_默认按钮_05        If (DefaultButton Is Nothing OrElse Request("__EVENTTARGET") <> "") Then

Asp.net设置默认按钮的方法总结_默认按钮_05            MyBase.RaisePostBackEvent(sourceControl, eventArgument)

Asp.net设置默认按钮的方法总结_默认按钮_05        ElseIf (Not DefaultButton Is Nothing) Then

Asp.net设置默认按钮的方法总结_默认按钮_05            MyBase.RaisePostBackEvent(DirectCast(DefaultButton, System.Web.UI.IPostBackEventHandler), Nothing)

Asp.net设置默认按钮的方法总结_默认按钮_05        End If

Asp.net设置默认按钮的方法总结_默认按钮_51    End Sub

4.DefaultButton.js文件内容:

Asp.net设置默认按钮的方法总结_idefor(i=0;i<Form1.elements.length;i++)

Asp.net设置默认按钮的方法总结_ide{

Asp.net设置默认按钮的方法总结_ide    if(Form1.elements[i].type == "submit")

Asp.net设置默认按钮的方法总结_ide    {

Asp.net设置默认按钮的方法总结_ide        fstsubmit = Form1.elements[i]

Asp.net设置默认按钮的方法总结_ide        fstsubmit.attachEvent("onmouseup", changeEvent)

Asp.net设置默认按钮的方法总结_ide        //break; 这一句应该去掉

Asp.net设置默认按钮的方法总结_ide    }

Asp.net设置默认按钮的方法总结_ide}

Asp.net设置默认按钮的方法总结_idefunction changeEvent()

Asp.net设置默认按钮的方法总结_ide{

Asp.net设置默认按钮的方法总结_ide    __doPostBack(event.srcElement.id, '')

Asp.net设置默认按钮的方法总结_ide}

在继承页面的load事件里:

5.DefaultButton = 需要设置为默认按钮的对象名称

即可。