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

本文介绍了在ASP.NET页面中通过设置默认按钮、自定义控件和JavaScript方法解决文本框按回车提交不同按钮的问题。包括使用ufoTextBox控件、自定义转换器和DefaultButton.js脚本来实现个性化按钮触发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第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() 
        GetPostBackEventReference(New System.Web.UI.Control) 
        RegisterStartupScript("DefaultButton", "<script language='javascript' src='/js/DefaultButton.js'></script>") 
    End Sub
 
 
    Protected Overloads Overrides 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 NothingThen 
            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 = 需要设置为默认按钮的对象名称 
即可。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值