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 вы потенциально можете иметь один обработчик, который обрабатывает события из нескольких кнопок и выполняет правильный код на основе переданное имя команды.