Asp.Net 默认按钮

设置默认按钮。


function document.onkeydown()  
{  
    if(event.keyCode==13)  

    {  
        document.form1.all.Submit.click();   
//这里的submit是按钮的ID
    }  
}


二.


<form id="form1"
runat
="server" defaultbutton="button1">
<div>
<asp:Panel DefaultButton="button1"></asp:Panel>
<asp:Button ID="button1"
runat
="server" Text="Button1"
/>
</div>
</form>


三.(转)


第1种方法:
就是在Asp.net的页面中找到
<form
id="form1" runat="server" defaultbutton="Ok">

设置form的属性
defaultbutton=“默认按钮ID”
这个是我在VS2005中式的,不知道2003中是吗






第2种方法:
http://www.cnblogs.com/netufo/archive/2004/12/21/79841.html



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

今天实在任不住把它搞定,其实也不麻烦。
基本思路:
自己写一个控件继承 TextBox,增加一个 SubmitControl
属性用来指定此文本框上按回车时由哪个按钮来响应。
再做一个 Converter 增加设计时支持,就是在设计时可以用下拉框选择提交按钮。

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


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

ufoTextBox 控件:
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();
        }



        public override
System.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;
        }
    }



没几行代码,自己看吧。


第3种方法:
http://www.cnblogs.com/squirrel_sc/archive/2004/11/22/67206.html

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


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

2.基页面中声明变量:
Protected
DefaultButton As Button


3.在基页面中加入函数supportDefaultButton并重载RaisePostBackEvent


Private Sub supportDefaultButton()Sub
supportDefaultButton()
        GetPostBackEventReference(New
System.Web.UI.Control)
        RegisterStartupScript("DefaultButton",
"<script language='javascript'
src='/js/DefaultButton.js'></script>")
    End Sub

   
Protected Overloads Overrides Sub RaisePostBackEvent()Sub
RaisePostBackEvent(ByVal sourceControl As System.Web.UI.IPostBackEventHandler,
ByVal eventArgument As String)
        If (DefaultButton Is Nothing OrElse
Request("__EVENTTARGET") <> "") Then
           
MyBase.RaisePostBackEvent(sourceControl, eventArgument)
        ElseIf (Not
DefaultButton Is Nothing) Then
           
MyBase.RaisePostBackEvent(DirectCast(DefaultButton,
System.Web.UI.IPostBackEventHandler), Nothing)
        End If
    End
Sub

4.DefaultButton.js文件内容:


for(i=0;i<Form1.elements.length;i++)
{
   
if(Form1.elements[i].type == "submit")
    {
        fstsubmit =
Form1.elements[i]
        fstsubmit.attachEvent("onmouseup", changeEvent)

        //break; 这一句应该去掉
    }
}
function changeEvent()
{

    __doPostBack(event.srcElement.id, '')
}

在继承页面的load事件里:

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

posted @   thinksea  阅读(245)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示