Могу ли я создать ASP.NET ImageButton, который не выполняет обратную передачу? - PullRequest
7 голосов
/ 24 апреля 2010

Я пытаюсь использовать элемент управления ImageButton только для выполнения скриптов на стороне клиента. Я могу указать клиентский сценарий для выполнения, используя свойство OnClientClick, но как мне остановить его от попыток публикации каждый раз, когда пользователь щелкает по нему? При нажатии на эту кнопку нет причин оставлять сообщения. Я установил для CausesValidation значение False, но это не мешает публикации.

Ответы [ 8 ]

19 голосов
/ 19 апреля 2012

Я знаю, что на эту проблему уже был дан ответ, но простое решение - вернуть false из метода HTML onclick (т.е. метода ASPX OnClientClick), например,

<asp:ImageButton ID="ImageNewLink" runat="server" 
 ImageUrl="~/images/Link.gif" OnClientClick="DoYourStuff(); return false;"  />

При возврате false браузер не отправляет запрос обратно на сервер i.s. останавливает обратную передачу .NET.

4 голосов
/ 24 апреля 2010

Вот один способ, которым вы можете сделать это, не вступая в противоречие с функцией обратной передачи других элементов управления:

Определите вашу кнопку примерно так:

<asp:Button runat="server" Text="Button" UseSubmitBehavior="false" OnClientClick="alert('my client script here');my" />

Окончание «my» в обработчике OnClientClick - это путь к псевдониму asp.net для клиентского события __doPostBack, которое вызывает обратную передачу; мы просто переопределяем поведение, не делая ничего похожего на этот скрипт:

<script type="text/javascript">

function my__doPostBack(eventTarget, eventArgument) {
    //Just swallow the click without postback of the form
}
</script>

Редактировать: Да, я чувствую, что мне нужно принять душ после некоторых грязных трюков, которые мне нужно потянуть, чтобы asp.net сделал то, что я хочу.

2 голосов
/ 28 октября 2011

Другим решением будет определение PostBackUrl, который ничего не делает

<asp:imagebutton runat="server" PostBackUrl="javascript:void(0);" .../>
1 голос
/ 21 июня 2013

Раствор 1

<asp:ImageButton ID="btn" runat="server" ImageUrl="~/images/yourimage.jpg"
OnClientClick="return false;"  />

OR Раствор 2

<asp:ImageButton ID="btn" runat="server" ImageUrl="~/images/yourimage.jpg" 
OnClientClick="yourmethod(); return false;"  />

Кроме того (решение 2), ваш метод javascript может быть в этой форме

<script type="text/javascript">
    function yourmethod() {
    __doPostBack (__EVENTTARGET,__EVENTARGUMENT); //for example __doPostBack ('idValue',3);
    }
</script>

в коде позади

protected void Page_Load(object sender, System.EventArgs e)
{
    if (this.IsPostBack) {
        string eventTarget = this.Request("__EVENTTARGET") == null ? string.Empty : this.Request("__EVENTTARGET");
        string eventArgument = this.Request("__EVENTARGUMENT") == null ? string.Empty : this.Request("__EVENTARGUMENT");
    }
}
1 голос
/ 14 июня 2013

Это прекрасно работает для меня:

Используйте OnClientClick, чтобы написать свой скрипт, и PostBackUrl="javascript:void(0);", чтобы избежать обратной передачи.

<div class="close_but">
    <asp:ImageButton ID="imgbtnEChartZoomClose" runat="server" ImageUrl="images/close.png" OnClientClick="javascript:zoomclosepopup();" PostBackUrl="javascript:void(0);" />
    </div>
1 голос
/ 24 апреля 2010

Использовать управление на стороне сервера.

<asp:Image runat="server" .../>

Уверен, вы можете добавить к этому событию onclick клиента.

1 голос
/ 24 апреля 2010
<image src="..." onclick="DoYourThing();" />
0 голосов
/ 06 апреля 2016

Используйте OnClientClick для написания вашего скрипта и PostBackUrl = "javascript: void (0);" чтобы избежать обратной передачи

...