OnCommand vs OnClick
Я проводил некоторые исследования по своему проекту (ASP.NET веб-формы) и наткнулся на 2 типа событий, которые кажутся похожими, OnCommand и OnClick. Я прочитал страницы MSDN, но мне все еще неясны различия между ними.
В чем разница между OnCommand и OnClick и когда я хотел бы использовать какое событие?
/ / отредактировано для указания типа приложения
3 ответа:
Если вы находите документацию немного неясной, это понятно.
Происходит то, что
OnClick
является событием более низкого уровня, чемOnCommand
. Вы можете думать оOnClick
как о более похожем на физическое событие, аOnCommand
как о более похожем на логическое событие, так сказать.Когда элемент управления нажат, он получает событие
OnClick
, которое сообщает элементу управления, что был щелчок. Контроль может делать различные вещи в качестве ответа. Если элемент управления связан с командой, и если обработка события по умолчанию разрешена, затем система будет следовать за этим с событиемOnCommand
.(я не уверен / не помню, насколько сильно вы контролируете подавление обработки по умолчанию в WinForms, но вы, безусловно, можете контролировать это на базовом уровне программирования Win32.)
Событие
Знание, которое можно извлечь из всего этого, состоит в следующем:OnCommand
может быть вызвано другими средствами, кроме щелчка. Например, вы можете использовать сочетание клавиш для активации элемента управления, и в этом случае будет не будьOnClick
.Никогда не используйте OnClick, когда OnCommand будет достаточно.
Если вы пишете программу для использования
OnClick
для запуска операцийбизнес-логики , то ваша программа потребует от пользователя использования мыши. Есть много пользователей, которые не могут использовать мышь из-за инвалидности, есть много пользователей, которые просто предпочитают клавиатуру мыши, и есть много устройств вот даже мыши нет.(на этих устройствах щелчок часто имитируется прикосновением, но это не гарантировано, и в любом случае все эти неуклюжие симуляции никогда не должны были быть необходимы в первую очередь, единственная причина, по которой они добавлены, состоит в том, что программисты были небрежны в первую очередь, и они делали глупые вещи, такие как запуск действий на
OnClick
вместоOnCommand
.)Было бы нормально использовать
OnClick
, если бы вы писали свой собственный контроль. Например, если вы пишете свой собственный элемент управления edit box, и вы хотите, чтобы пользователь мог щелкнуть где-то в элементе управления, чтобы поместить курсор в это точное место, то было бы нормально сделать это в ответ на запускаемое событиеOnClick
. Но обратите внимание, что это действие предназначено только для внутреннего использования элемента управления, оно не вызывает никаких действий, которые являются внешними по отношению к элементу управления.
Это прямо со страницы msdnhttps://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; } }
Итак, здесь у вас есть один обработчик, где вы можете обрабатывать щелчки нескольких кнопок в зависимости от того, какие кнопки аргумента команды передаются.
В документации 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 вы потенциально можете иметь один обработчик, который обрабатывает события из нескольких кнопок и выполняет правильный код на основе переданное имя команды.