Странная проблема - не могу назначить JavaScript на кнопку ссылки - PullRequest
3 голосов
/ 16 февраля 2009

Кажется, я много раз справлялся с одной и той же задачей; но в настоящее время я полностью застрял в самой простой вещи, и это вызвало раздражение

Мне нужно назначить JavaScript для кнопки ссылок ASP.Net (или гиперссылки, не имеет значения) Что кажется проще?

Миллиард раз я делал это с таким кодом

        //lbHeader.Attributes.Add("onclick",
        //    string.Format("ToggleSelectionPopup('{0}');return false;", panelContainer.ClientID));

Но это не работает. HTML, который я получаю, содержит javascript: __ doPostback (blahblahblah) и игнорирует функцию «onclick» моего клиента. Вместо этого, когда страница переходит на обратную передачу, когда я нажимаю кнопку (несмотря на то, что функция «onclick» правильно добавляется в «просмотр исходной страницы» HTML

Я пытался применить некоторые приемы и подходы, такие как следующие

1) заменить LinkButton на Hyperlink - эффект все тот же, страница переходит к «NavigateURL», когда я нажимаю на ссылку.

2) назначить свойство OnClientClick в декларативном макете - тот же эффект, страница в любом случае переходит на обратную передачу и игнорирует "onclick"

3) назначить "javascript: ToggleSelectionPopup (blahblahblah)" в качестве NavigateURL гиперссылки и в качестве PostBackURL ссылки link. Также не работает

Ни один из приемов не помог. Что я делаю не так, есть идеи?

Мне просто нужно избавиться от дерьмовой производительности сервера этого элемента управления, но как я могу это сделать? Конечно, я могу сделать LiteralControl с помощью «вручную», но я бы не хотел использовать такой грубый подход.

Помощь высоко ценится

Ответы [ 8 ]

4 голосов
/ 16 февраля 2009

Вы можете использовать элемент управления LinkButton и добавить вызов функции javascript для OnClientClick. Это будет вызвано перед проверкой клиентской стороны и перед обратной передачей (очевидно). Если вам нужно выполнить это после проверки, но до обратной передачи, вы можете вызвать проверку на стороне клиента вручную в OnClientClick с помощью Page_ClientValidate () ';

<script type="text/javascript">
function someJsYouWant()
{
  alert('HelloSO');
}
</script>

 <asp:LinkButton ID="btnSearch" 
         runat="server"
         OnClientClick="Page_ClientValidate(); someJsYouWant();"
         onclick="btnSearch_OnClick">Search</asp:LinkButton>
1 голос
/ 16 февраля 2009

Элементы управления ASP.NET Button и LinkButton всегда будут выполнять обратную передачу. JavaScript, который вы можете добавить с помощью свойства OnClientClick, будет выполняться до обратной передачи, но не предотвратит обратную передачу.

Вместо этого вы можете использовать элемент управления HyperLink следующим образом:

<asp:HyperLink runat="server" ID="hyperlink1" NavigateUrl="JavaScript:alert('!');">Test</asp:HyperLink>

Я заметил, что вы используете имя переменной lbHeader. Вы уверены, что добавляете свой javascript к нужному элементу управления, а не к какой-то случайной метке?

0 голосов
/ 17 февраля 2009

Спасибо всем, я решил проблему

javascript: void (0) оказался верным путем.

Описав мою гиперссылку следующим образом

<asp:Hyperlink  ID="hrefHeader" Text="lbHeader" runat="server"  Font-Size="Large" Font-Italic="true" 
 CausesValidation="False"  NavigateUrl="javascript:void(0);" ForeColor="#0033CC" >
</asp:Hyperlink>

«onclick» начал стрелять.

0 голосов
/ 16 февраля 2009

Вы уверены, что не получаете ошибку времени выполнения при вызове toggleSelectionPopup?

0 голосов
/ 16 февраля 2009

Немного неясно, что вы пытаетесь сделать. У вас есть неверный оператор if в вашем javascript. Попробуйте это (это работает - я пробовал):

hrefHeader.NavigateUrl = String.Format("javascript:toggleSelectionPopup('{0}');", panelContainer.ClientID);
0 голосов
/ 16 февраля 2009

Поскольку я не в .NET, а в Html / Javascript / Ajax, возможно, я ошибаюсь, но если вы используете способ onclick, для некоторых браузеров вам также придется добавить: href = "JavaScript: недействительным (0)" . Таким образом, будет выполнен только онклик.

0 голосов
/ 16 февраля 2009

Вы просто забыли поставить "javascript:" в начале своей строки? [Глупый я]

Код, который я использую для такого рода вещей, выглядит следующим образом:

myLinkButton.SetAttribute("onclick", "javascript:if(someCondition()) return false;");

... но я думаю, что это почти то же самое, что и Attributes.Add.

Ваш код мне кажется правильным. Я предполагаю, что атрибут перезаписывается чем-то другим в жизненном цикле страницы. Добавьте точку останова в Render страницы и посмотрите на коллекцию атрибутов вашего LinkButton. Также проверьте визуализированный HTML и посмотрите, появляется ли там вообще ваш JavaScript.

0 голосов
/ 16 февраля 2009

Как вариант, вы можете попробовать HtmlAnchor control.

в атрибуте onclick return false; достаточно для остановки перенаправления.

<a href="not_importans.htm" onclick="javascript:someothermethod();return false;">Trial Link</a>

но ваш код выглядит нормально. Вы проверяете вывод HTML вашего LinkButton? Может быть, какой-то другой код назначен атрибуту onclick .

...