OnCommand vs OnClick


Я проводил некоторые исследования по своему проекту (ASP.NET веб-формы) и наткнулся на 2 типа событий, которые кажутся похожими, OnCommand и OnClick. Я прочитал страницы MSDN, но мне все еще неясны различия между ними.

В чем разница между OnCommand и OnClick и когда я хотел бы использовать какое событие?

/ / отредактировано для указания типа приложения

3 2

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