Отключите обратную передачу на кнопке

#asp.net #asplinkbutton

Вопрос:

У меня есть ASP.NET кнопка управления ссылкой в моей форме. Я хотел бы использовать его для javascript на стороне клиента и запретить его отправку обратно на сервер. (Я хотел бы использовать элемент управления linkbutton, чтобы в некоторых случаях я мог снять с него кожу и отключить его, поэтому прямой тег не является предпочтительным).

Как я могу предотвратить его отправку обратно на сервер?

Ответ №1:

Код ASPX:

 <asp:LinkButton ID="someID" runat="server" Text="clicky"></asp:LinkButton>
 

Код за:

 public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        someID.Attributes.Add("onClick", "return false;");
    }
}
 

То, что отображается как HTML, является:

 <a onclick="return false;" id="someID" href="javascript:__doPostBack('someID','')">clicky</a>
 

В этом случае происходит то, что функция onclick становится вашим валидатором. Если значение равно false, ссылка «href» не выполняется; однако, если оно равно true, ссылка будет выполнена. Это исключает ваш обратный пост.

Комментарии:

1. <asp:LinkButton ID="LinkButton5" runat="server" OnClick="A_Click" CssClass="linkOff" Text="Edit"></asp:LinkButton> и добавив вышесказанное, при нажатии ничего не происходит :/

2. идеально, некоторое время боролся с этим, так как не хотел, чтобы __обратный вызов вместо этого вызывал какой-то JS. очень признателен.

Ответ №2:

Это может показаться бесполезным ответом … Но почему вы используете кнопку ссылки для чего-то чисто клиентского? Используйте стандартный тег привязки HTML и установите его onclick действие в свой Javascript.

Если вам нужен сервер для создания текста этой ссылки, используйте an asp:Label в качестве содержимого между начальным и конечным тегами привязки.

Если вам нужно динамически изменять поведение скрипта на основе кода на стороне сервера, рассмотрите asp:Literal это как метод.

Но если вы не выполняете действия на стороне сервера из события щелчка кнопки ссылки, то, похоже, нет особого смысла использовать ее здесь.

Комментарии:

1. Я согласен. Прежде всего, я хочу использовать скин, который я уже создал для кнопок ссылок, используемых в других местах.

2. Можете ли вы не изменять оболочку или не основывать стили для данного якоря на тех, которые используются в оболочке?

3. Вы можете выбрать кнопку ссылки, даже если обратная связь с сервером отключена, когда: 1) Вы все еще хотите воспользоваться преимуществами элемента управления, реализующего INamingContainer. Например, у вас есть несколько пользовательских элементов управления на странице, где каждый содержит кнопку ссылки, для которой требуется уникальный идентификатор. 2) Вы хотите сохранить проверку клиента asp.

4. Кроме того, иногда кнопки ссылок используются в качестве целевого элемента управления для элемента управления расширителем ajax

5. Возможно, вам захочется, чтобы это динамически создавало кнопки. Однако вы можете использовать новый HtmlGenericControl()

Ответ №3:

Ты тоже можешь это сделать

 ...LinkButton ID="BtnForgotPassword" runat="server" OnClientClick="ChangeText('1');return false"... 

И это останавливает обратную связь по кнопке ссылки

Комментарии:

1. Это работает, но проблема в том, что если у вас есть какая-то операция, например, удаление записи после модального всплывающего окна, это вообще не работает. Это просто обновляет страницу. Ничего больше.

Ответ №4:

Просто установите href=»#»

 <asp:LinkButton ID="myLink" runat="server" href="#">Click Me</asp:LinkButton>
 

Комментарии:

1. из того, что я проверил, это приведет к тому, что страница будет прокручиваться вверх.

Ответ №5:

Я думаю, вам следует изучить вопрос с помощью элемента управления гиперссылкой. Это серверный элемент управления (так что вы можете управлять видимостью и тому подобным из кода), но он пропускает обычный тег привязки и не вызывает обратной связи.

Ответ №6:

Только что прошел через это, правильный способ сделать это-использовать:

  1. OnClientClick
  2. return false

как в следующем примере строки кода:

 <asp:LinkButton ID="lbtnNext" runat="server" OnClientClick="findAllOccurences(); return false;" />
 

Ответ №7:

В C# вы бы сделали что-то вроде этого:

 MyButton.Attributes.Add("onclick", "put your javascript here including... return false;");
 

Ответ №8:

Вместо реализации атрибута:

 public partial class _Default : System.Web.UI.Page{
 protected void Page_Load(object sender, EventArgs e)
 {
    someID.Attributes.Add("onClick", "return false;");
 }}
 

Воспользуйся:

 OnClientClick="return false;"
 

внутри asp:тег LinkButton

Ответ №9:

Чтобы избежать обновления страницы, если return false она не работает с asp:LinkButton использованием

 href="javascript: void;"
 

или

 href="#"
 

вместе с OnClientClick="return false;"

 <asp:LinkButton ID="linkPrint" runat="server" CausesValidation="False" href="javascript: void;"
        OnClientClick="javascript:self.print();return false;">Print</asp:LinkButton>
 

Выше приведен код, который вызовет печать браузера без обновления страницы.

Ответ №10:

вызовите функцию java-скрипта при событии onclick.

Ответ №11:

Вы пробовали использовать OnClientClick это ?

 var myLinkButton = new LinkButton { Text = "Click Here", OnClientClick = "JavaScript: return false;" };

<asp:LinkButton ID="someID" runat="server" Text="clicky" OnClientClick="JavaScript: return false;"></asp:LinkButton>
 

Ответ №12:

Кое-что еще, что вы можете сделать, если хотите сохранить положение прокрутки, это:

 <asp:LinkButton runat="server" id="someId" href="javascript: void;" Text="Click Me" />
 

Ответ №13:

Почему бы не использовать пустую панель обновления ajax и не привязать к ней событие щелчка кнопки ссылки? Таким образом, будет обновлена только панель обновления, что позволит избежать обратной передачи и позволит вам запустить javascript

Ответ №14:

Кажется, никто не делает этого вот так:

 createEventLinkButton.Attributes.Add("onClick", " if (this.innerHTML == 'Please Wait') { return false; } else {  this.innerHTML='Please Wait'; }");
 

Похоже, это единственный работающий способ.

Ответ №15:

В функции jquery ready вы можете сделать что-то вроде приведенного ниже —

 var hrefcode = $('a[id*=linkbutton]').attr('href').split(':');
var onclickcode = "javascript: if`(Condition()) {"   hrefcode[1]   ";}";
$('a[id*=linkbutton]').attr('href', onclickcode);
 

Комментарии:

1. Добро пожаловать в StackOverflow! Поскольку в ОП не упоминался jQuery, ваш ответ немного не по теме. Чтобы сделать ответ лучше, вы могли бы включить здесь дополнительный контекст о том, как включить jQuery. С другой стороны, поскольку вопрос был задан и на него ответили (много раз) 5 лет назад, на данный момент были бы полезны только ответы по теме.

Ответ №16:

Возможно, вы также захотите, чтобы функция на стороне клиента возвращала значение false.

 <asp:LinkButton runat="server" id="button" Text="Click Me" OnClick="myfunction();return false;" AutoPostBack="false" />
 

Вы также могли бы рассмотреть:

 <span runat="server" id="clickableSpan" onclick="myfunction();" class="clickable">Click Me</span>
 

Я использую класс clickable для установки таких параметров, как указатель, цвет и т. Д., Чтобы его внешний вид был похож на тег привязки, но мне не нужно беспокоиться о том, что он будет отправлен обратно или мне придется выполнить трюк href=»javascript:void(0);».

Комментарии:

1. OnClick связывает событие на стороне сервера, а не событие на стороне клиента. onclientclick-это событие клиента

Ответ №17:

используйте ссылку html вместо ссылки asp, и вы можете использовать метку между ссылками html для управления на стороне сервера