我正在对我的项目(ASP.NET Web Forms)进行一些研究,并且遇到了两种类似的事件类型,OnCommand和OnClick。我已经阅读了MSDN页面,但我仍然不清楚它们之间的差异。
OnCommand与OnClick之间的区别是什么?我想在何时使用哪个事件?
//编辑以指定应用类型
答案 0 :(得分:5)
如果您发现文档有点不清楚,那是可以理解的。
OnClick
是一个比OnCommand
更低级别的事件。你可以认为OnClick
更像是一个物理事件,而OnCommand
更像是一个逻辑事件,可以这么说。
单击控件后,它会收到一个OnClick
事件,告知控件有一个点击。控件可以做各种事情作为回应。如果控件与命令相关联,并且如果允许对事件进行默认处理,则系统将使用OnCommand
事件执行此操作。
(我不确定/不记得你对WinForms中默认处理的抑制有多少控制,但你当然可以在底层的Win32编程层中控制它。)
OnCommand
事件可以通过点击以外的方式触发。例如,您可以使用键盘快捷键来激活控件,在这种情况下,不会有OnClick
。
从这一切带回家的知识如下:
当OnCommand足够时,永远不要使用OnClick。
如果您编写程序以使用OnClick
来触发业务逻辑操作,那么您的程序将要求用户使用鼠标。有许多用户由于残疾而无法使用鼠标,有许多用户只是喜欢键盘而非鼠标,而且有许多设备甚至没有鼠标。
(在这些设备上,通常会通过触摸来模拟点击,但这并不能保证,并且无论如何所有这些笨重的模拟应该从来没有必要,这是唯一的原因添加它们是因为程序员一开始就粗心大意,他们正在做一些愚蠢的事情,比如在OnClick
而不是OnCommand
上触发操作。)
如果您正在编写自己的控件,那么可以使用OnClick
。例如,如果您正在编写自己的编辑框控件,并且您希望用户能够单击控件中的某个位置以将插入符号放置在该确切位置,那么可以将其作为响应正在触发OnClick
事件。但请注意此操作仅用于控件的内部使用,它不会触发控件外部的任何操作。
答案 1 :(得分:4)
直接来自msdn页面https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.oncommand.aspx
但是试着用一点点冗长来解释:
OnCommand
用于将额外的参数传递给处理程序。例如,如果您有两个按钮来对列表进行升序和降序排序。您可以为两个按钮定义单个处理程序,并传递OnClick
和CommandName
CommandArgument
处理程序。
<asp:Button id="Button1"
Text="Sort Ascending"
CommandName="Sort"
CommandArgument="Ascending"
OnCommand="CommandBtn_Click"
runat="server"/>
<asp:Button id="Button2"
Text="Sort Descending"
CommandName="Sort"
CommandArgument="Descending"
OnCommand="CommandBtn_Click"
runat="server"/>
void CommandBtn_Click(Object sender, CommandEventArgs e)
{
switch(e.CommandName)
{
case "Sort":
// Call the method to sort the list.
Sort_List((String)e.CommandArgument);
break;
}
}
所以这里你有一个单一的处理程序,你可以处理多个按钮的点击,具体取决于按钮传递的命令参数。
答案 2 :(得分:0)
在MSDN文档中,它在备注部分中说明了关键区别。
使用OnCommand:
The Command event is raised when the Button control is clicked. This event is commonly used when a command name, such as Sort, is associated with the Button control. This allows you to create multiple Button controls on a Web page and programmatically determine which Button control is clicked.
使用OnClick:
The Click event is raised when the Button control is clicked. This event is commonly used when no command name is associated with the Button control (for instance, with a Submit button).
因此,如果您只想在单击按钮时执行某些代码,但不关心特定情况的具体执行情况,那么OnClick
就可以了。
编辑添加:使用OnCommand,您可能有一个处理程序来处理来自多个按钮的事件,并根据传递的命令名执行正确的代码。