button控件的commandname、commandargument onclick、oncommand 的区别
button控件在执行后被解析为<input type="submit">代码,而button控件的优点就在于提交程序的同时能够传递参数,传递参数是靠commandname与commandargument属性来完成的。
举两个button控件的例子。
<% @ page language="c#" %>
<script language="c#" runat="server">
public void button_click(object sender,eventargs e)
{
string argname = ((button)sender).commandname;
//sender为一个对象,故commandargument为string
string argarg = ((button)sender).commandargument;
label1.text="您选中的动作为:<font color=red>"+argname+"</font>,动作目标是:<font color=red>"+argarg+"</font>";
}
</script>
<html>
<head>
<title></title>
</head>
<body>
<b>button控件演示</b>
<hr>
<form runat="server">
<asp教程:button id="button1" commandname="踢" commandargument="足球" text="动作1" runat="server" onclick="button_click" /><br>
<asp:button id="button2" commandname="打" commandargument="篮球" text="动作2" runat="server" onclick="button_click" /><br>
<hr>
<asp:label id="label1" runat="server" />
</form>
</body>
</html>
////////////////////////////////////
<% @ page language="c#" %>
<script language="c#" runat="server">
public void button_click(object sender,commandeventargs e)
{
string argname = e.commandname;
//commandeventargsr为一个类,故commandargument.tostring();
string argarg = e.commandargument.tostring();
label1.text="您选中的动作为:<font color=red>"+argname+"</font>,动作目标是:<font color=red>"+argarg+"</font>";
}
</script>
<html>
<head>
<title></title>
</head>
<body>
<b>button控件演示</b>
<hr>
<form runat="server">
<asp:button id="button1" commandname="踢" commandargument="足球" text="动作1" runat="server" oncommand="button_click" /><br>
<asp:button id="button2" commandname="打" commandargument="篮球" text="动作2" runat="server" oncommand="button_click" /><br>
<hr>
<asp:label id="label1" runat="server" />
</form>
</body>
</html>
分析:1.两个程序用不同的方法完成相同的功能和效果。
2.类commandeventargs有两个公共属性,commandname(用来获取命令的名称)和commandargument(用来获取命令的参数)。二者相互关联。
3.两个程序分别用onclick与oncommand激发事件,区别在于oncommand是带值传递的。
4.所有button类的web控件(如imagebutton,linkbutton)均含有commandname和commandargument这两个属性。
问题:上文中两个程序采用的参数commandeventargs,eventargs有什么区别?为什么在第一个程序中使用eventargs,而不能使用commandeventargs(已经验证,出现“button_click”的重载均与委托“system.eventhandler”不匹配)?
例子:http://hi.baidu.com/fuhengyu/blog/item/b37e14fb3e6055264e4aea65.html
解决:在网上查资料得到的结果:
这类问题出现的原因就是在控件的一些事件里面调用了函数,而这些函数的参数与该事件所要用到的参数类型不一致。在msdn中搜索onpageindexchanging、onpageindexchanged等关键字就可以得到:
c#
protected virtual void onpageindexchanged (eventargs e)
c#
protected virtual void onpageindexchanging (detailsviewpageeventargs e)
c#
protected virtual void onrowdeleting (gridviewdeleteeventargs e)
c#
protected virtual void onrowdeleted ( datarowchangeeventargs e)
这样,在何种事件中使用什么样的参数类型就一目了然了。还有后面的onrowdeleted、onrowdeleting也是同样的道理。
相应事件:
public void mylist_page(object sender, gridviewpageeventargs e)
public void mydatagrid_delete(object sender, gridviewdeleteeventargs e)