Как сгенерировать поддельную обратную передачу с помощью javascript?

У меня есть Dropdownlist на моей странице и его метод selectedindexchanged, созданный в коде файла (.cs).

Я хотел создать поддельную обратную передачу с тегом A (событие onmouseover).

Сначала я просмотрел исходный код html.

<select name="ctl00$cpholder_ana$ddlFaturaNolar" onchange="javascript:setTimeout('__doPostBack(\'ctl00$cpholder_ana$ddlFaturaNolar\',\'\')', 0)" id="ctl00_cpholder_ana_ddlFaturaNolar">
    <option selected="selected" value="CHOOSE"></option>
    <option value="001926">[ 30.04.2009 - 156.492,00 TL ]  001926</option>
</select>
  • Затем я скопировал

    onchange="javascript:setTimeout('__doPostBack(\'ctl00$cpholder_ana$ddlFaturaNolar\',\'\')', 0)" 
    

И я создал тег с событием наведения мыши (чтобы сделать постбэк, но так как он запущен Dropdownlist)

<a onmouseover="javascript:setTimeout('__doPostBack(\'ctl00$cpholder_ana$ddlFaturaNolar\',\'\')', 0)">asdasdasdasdad</a>

Но он не упал до метода SelectedIndexChanged.

  • Во-первых, ПОЧЕМУ?
  • Во-вторых, как я могу это сделать?

Спасибо с этого момента.


person uzay95    schedule 26.05.2009    source источник


Ответы (4)


Вы можете использовать этот фрагмент кода -

__doPostBack('<%= dropdownlist.UniqueID %>', '');

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

РЕДАКТИРОВАТЬ: Забыл упомянуть одну важную вещь. Страница будет выполнять обратную передачу только тогда, когда изменится selectedIndex раскрывающегося списка :) Итак, если вы хотите запустить это событие, измените индекс раскрывающегося списка, используя это, а затем вызовите код __doPostBack -

document.getElementById("<%= dropdownlist.UniqueID %>").selectedIndex = 1;
__doPostBack('<%= dropdownlist.UniqueID %>', '');

EDIT2: добавив к тому, что сказал Боб, вы можете использовать скрытые элементы управления сервером. Я предлагаю вам использовать элемент управления asp:Hidden и подключить его событие OnValueChanged. Итак, всякий раз, когда вы хотите опубликовать свою страницу обратно на сервер, вам просто нужно изменить значение вашей скрытой переменной. Таким образом, вам не придется использовать скрытую кнопку.

document.getElementById("<%= hiddenField.UniqueID %>").value = (new Date()).getTime();
person Kirtan    schedule 26.05.2009
comment
Я изменил на: ‹a onmouseover=javascript:__doPostBack('‹%= ddlFaturaNolar.UniqueID %›', '');›asdasdasdasdad‹/a› Но это не работает. - person uzay95; 26.05.2009

Мне жаль говорить, ребята

__doPostBack не работает для DropDownList, но работает для кнопки. Так что сделайте одну вещь

Добавьте кнопку, которой нужно следовать, как это

<asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="true" 
OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged">
  <asp:ListItem Text="All" Value="0" Selected="True"></asp:ListItem>
  <asp:ListItem Text="Published" Value="1"></asp:ListItem>
  <asp:ListItem Text="Pending" Value="2"></asp:ListItem>
  <asp:ListItem Text="Rejected" Value="3"></asp:ListItem></asp:DropDownList>

теперь вызовите свой метод __doPostBack

__doPostBack('<%= btnRefresh.UniqueID %>','');
person PURNA MAGUM    schedule 22.12.2011

Разве это не <%= ddlFaturaNolar.ClientID %>?

person janhartmann    schedule 26.05.2009
comment
ClientID не работает для кнопок и т. д. Поэтому лучше использовать UniqueID для каждого элемента управления. - person Kirtan; 26.05.2009
comment
Хорошо, тогда игнорируйте мой ответ. :-) - person janhartmann; 26.05.2009

Другой вариант, который вы можете попробовать, который я считаю более простым и, вероятно, сломается, — это создать скрытую (style="display:none" не используйте свойство visible) asp:Button на вашей странице. Когда вы хотите опубликовать ответ, вы можете просто имитировать нажатие на эту кнопку.

 document.getElementById("<%= Button1.ClientID %>").click();

Если вы хотите продолжить публикацию в раскрывающемся списке, убедитесь, что свойство AutoPostBack раскрывающегося списка все еще имеет значение true. Просто имейте в виду, что это поведение немного странное, вы запускаете выбранное измененное событие при наведении курсора мыши. Мало того, что это немного сбивает с толку, вы также увеличиваете риск случайных обратных передач, так как очень легко навести курсор мыши на что-то и ожидать, что ничего не произойдет.

person Bob    schedule 26.05.2009