ASP.NET Intellisense против атрибутов на стороне клиента - PullRequest
5 голосов
/ 25 апреля 2009

Я просто углубляюсь в клиентскую часть ASP.NET, используя Javascript, и есть кое-что, что беспокоит меня, надеюсь, кто-нибудь сможет объяснить. Почему intellisense не отображает все атрибуты / свойства элемента управления .NET? Например, ListItem в RadioButtonListControl:

<asp:ListItem Value="1" Text="Yes" onclick="alert('TEST1');" />
<asp:ListItem Value="0" Text="No" onclick="alert('TEST2');" />

Intellisense не показывает свойство onclick (или оно называется атрибутом?) ListItem, но оно, безусловно, работает. Почему это не показывает? Или я слишком полагаюсь на Intellisense? :-) Или я должен объявить этот материал в коде позади?

Ответы [ 5 ]

2 голосов
/ 25 апреля 2009

Проблема заключается в том, что intellisense для элементов управления веб-сервера не отображает события на стороне клиента, а только перечисляет события, возникающие на сервере. Если бы вы использовали серверный элемент управления HTML для той же цели, вы бы увидели события (JS на стороне клиента) в Intellisense.

Другая проблема, которую следует учитывать, - это то, что событие onclick не поддерживается для элементов option (по крайней мере, не в IE, хотя Firefox прекрасно его поддерживает). Вместо этого вы должны обработать onchange клиентское событие. Пример:

<select id="htmlserverselect" runat="server" onchange="alert(this.value);">
  <option value="1">Yes</option>
  <option value="2">No</option>
</select>
2 голосов
/ 25 апреля 2009

Много раз зависит от элемента управления, с которым вы работаете, и атрибута. Я знаю, что элементы управления ASP button будут показывать атрибуты onclick и onclientclick в intellisense. Возможно, ASP.NET не полностью поддерживает атрибут onClick для listitem (в отличие от атрибута selectedindexchanged в элементах управления listbox / dropdownlist / etc)

1 голос
/ 25 апреля 2009

Класс ListItem не имеет свойства onclick.

Похоже, что ListItem реализует интерфейс IAttributesAccessor, а также имеет коллекцию Attributes. Это задокументировано как:

Получает коллекцию пар имени и значения атрибута для ListItem, которые не поддерживаются классом напрямую.

Атрибуты, которые вы помещаете в тег таким образом, отображаются при визуализации элемента управления. Детали этого отличаются по контролю. Я экспериментировал со страницей, содержащей следующее:

<asp:DropDownList ID="_ddl1" runat="server" >
    <asp:ListItem Text="Item 1" Value="Item1" onClick="foox();" oncluck="bar(this);" />
</asp:DropDownList>
<asp:ListBox ID="_listBox1" runat="server">
    <asp:ListItem Text="Item 1" Value="Item1" onClick="foox();" oncluck="bar(this);" />
</asp:ListBox>
<asp:RadioButtonList ID="_radioList1" runat="server">
    <asp:ListItem Text="Item 1" Value="Item1" onClick="foox();" oncluck="bar(this);" />
</asp:RadioButtonList>

В случае DropDownList и ListBox оба атрибута отображаются в элементе <Option>. В случае RadioButtonList атрибут onclick отображается в элементе <input type="radio">, а нераспознанный элемент oncluck - в элементе <span>.

Обратите внимание, что событие oncluck, по-видимому, никогда не запускается.

; -)

0 голосов
/ 20 января 2010

Давайте предположим, что у нас есть всплывающее сообщение, инициированное сеансом Тайм-аут вид события.

Как вы должны иметь для онлайн-банкинга веб приложение.

Итак, всплывает сообщение о том, что у вас мало больше минут, чтобы завершить ваш опыт работы с этим конкретным защищенный сайт.

Обычно, если вы ничего не делаете с этим, в Примерно в то же время, когда сообщение появилось, приложение будет выйти из системы

На стороне клиента у вас есть JavaScript для синхронизации эти действия.

Теперь давайте скажем, что кнопка, которая вас выдает, называется «btnSignOut».

Если вы хотите запустить то же действие из линия JS, по таймауту у вас должно быть что-то вроде этого:

if(timeout){
;
 }

Это вызовет то же событие, что и при нажатии на «btnSignOut» LinkButton.

Источник

0 голосов
/ 25 апреля 2009

Причина, по которой вы не видите его в intellisense, заключается в том, что «onclick» не является ASP.Net. Вы заметите, что если вы сделаете следующее:

<asp:ListItem Value="1" Text="Yes" Secret="Yes" onclick="alert('TEST1');" />
<asp:ListItem Value="0" Text="No" Secret="No" onclick="alert('TEST2');" />

Если вы посмотрите на то, что отображается в html, вы увидите атрибут «Секрет». Таким образом, в то время как ASP.Net будет отображать любые атрибуты, которые вы там указали, он предоставит только intellisense для атрибутов ASP.Net.

Что касается практики кодирования, я видел и использовал "onclick" слишком много раз, чтобы сосчитать. Поэтому, хотя у пуриста могут быть проблемы с практикой, я думаю, что его можно использовать.

...