zoukankan      html  css  js  c++  java
  • Asp.net设置默认按钮的方法总结


    第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 = 需要设置为默认按钮的对象名称
    即可。
  • 相关阅读:
    zookeeper
    消息中间件介绍
    Java实现动态代理的两种方式
    深入理解Java内存模型
    消息中间件(一)MQ详解及四大MQ比较
    synchronized关键字详解及分析锁升级过程
    JDK1.6的Synchronized底层优化(偏向锁、轻量级锁)
    分布式通信-tcp/ip socket
    技术点
    大众点评 cat
  • 原文地址:https://www.cnblogs.com/goody9807/p/1041317.html
Copyright © 2011-2022 走看看