OnClick по сравнению с OnClientClick для asp:CheckBox?

Используйте оболочку globbing синтаксис:

grep pattern -r --include=\*.{cpp,h} rootdir

синтаксис для --exclude идентичен.

Примечание, что звезды оставляют с обратной косой чертой, чтобы препятствовать тому, чтобы он был расширен оболочкой (заключающий его в кавычки, такой как --include="*.{cpp,h}", работал бы точно также). Иначе, если бы у Вас были какие-либо файлы в текущем рабочем каталоге, который соответствовал шаблону, командная строка расширилась бы до чего-то как grep pattern -r --include=foo.cpp --include=bar.h rootdir, который только искал бы файлы, названные foo.cpp и bar.h, который довольно вероятен не, что Вы хотели.

83
задан Stobor 16 July 2009 в 02:27
поделиться

3 ответа

Это очень странно. Я проверил страницу документации CheckBox , которая читает

<asp:CheckBox id="CheckBox1" 
     AutoPostBack="True|False"
     Text="Label"
     TextAlign="Right|Left"
     Checked="True|False"
     OnCheckedChanged="OnCheckedChangedMethod"
     runat="server"/>

. Как видите, атрибуты OnClick или OnClientClick не определены.

Имея это в виду, я думаю, вот что происходит.

Когда вы это делаете,

<asp:CheckBox runat="server" OnClick="alert(this.checked);" />

ASP.NET не изменяет атрибут OnClick и отображает его как есть в браузере. Это будет выглядеть так:

  <input type="checkbox" OnClick="alert(this.checked);" />

Очевидно, браузер понимает «OnClick» и выдает предупреждение.

И в этом сценарии

<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />

Опять же, ASP.NET не изменит атрибут OnClientClick и отобразит его как

<input type="checkbox" OnClientClick="alert(this.checked);" />

Поскольку браузер не распознает OnClientClick, ничего не произойдет. Это также не вызовет никаких ошибок, поскольку это просто еще один атрибут.

Вы можете подтвердить выше, посмотрев на визуализированный HTML.

И да, это совсем не интуитивно.

104
ответ дан 24 November 2019 в 08:54
поделиться

Потому что это два разных типа элементов управления ...

Видите ли, ваш веб-браузер не знает о программировании на стороне сервера. он знает только о своей собственной модели DOM и моделях событий, которые он использует ... И о событиях щелчка объектов, отображаемых в ней. Вам следует изучить окончательную разметку, которая фактически отправляется браузеру из ASP.Net, чтобы увидеть различия, которые вы сами.

<asp:CheckBox runat="server" OnClick="alert(this.checked);" />

отображает в

<input type="check" OnClick="alert(this.checked);" />

, а

<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />

отображает в

<input type="check" OnClientClick="alert(this.checked);" />

Теперь, насколько я могу вспомнить, нигде нет браузеров, поддерживающих событие "OnClientClick" в их DOM ...

Если есть сомнения, всегда просматривайте источник вывода, когда он отправляется в браузер ... есть целый мир отладочной информации, которая вы можете видеть.

9
ответ дан 24 November 2019 в 08:54
поделиться

Вы правы, это непоследовательно. Происходит то, что CheckBox НЕ ИМЕЕТ серверного события OnClick, поэтому ваша разметка отображается в браузере. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

В то время как Button имеет OnClick, поэтому ASP.NET ожидает ссылки на событие в разметке OnClick.

8
ответ дан 24 November 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: