Я могу создать ImageButton с ASP.NET это не обратная?

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

8 ответов


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

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

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

" мой "конец в обработчике для OnClientClick-это способ псевдонима asp.net' s __doPostBack client событие, которое заставляет обратную передачу; мы просто переопределяем поведение, не делая ничего похожего на этот скрипт:

<script type="text/javascript">

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

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


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

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

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


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

<asp:imagebutton runat="server" PostBackUrl="javascript:void(0);" .../>

<image src="..." onclick="DoYourThing();" />

используйте управление изображениями на стороне сервера

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

уверен, что вы можете добавить клиент onclick мероприятия к этому.


Решение 1

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

или Решение 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");
    }
}

Это отлично работает для меня:

использовать 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>

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