您的位置:首页 > 编程语言 > ASP

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

2012-11-19 10:21 447 查看
第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 = 需要设置为默认按钮的对象名称

即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: