asp: ImageButton не запускает событие onclick - PullRequest
9 голосов
/ 25 апреля 2009

У меня есть страница, которая использует главную страницу, несколько RequiredFieldValidators и расширитель автозаполнения Web Toolkit. Следующий код показывает только минимум страницы:

<%@ Page Language="C#" 
    AutoEventWireup="true"  
    CodeFile="Login.aspx.cs" 
    MasterPageFile="~/master.master" 
    Inherits="Login" %>

<asp:Content id="Content1" 
    contentplaceholderid="ContentPlaceHolder1" 
    runat="server">
    <asp:UpdatePanel ID="pnlUpdate" runat="server">
        <ContentTemplate>
            <div>
                <asp:ImageButton class="submitButton" 
                    imageurl="images/button_submit.gif" 
                    id="btnSubmit" 
                    runat="server" 
                    onclick="btnSubmit_ServerClick"/>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

Код-за:

protected void btnSubmit_ServerClick
      (object sender, ImageClickEventArgs e)
{
    //breakpoint here does not get hit
}

Тег <form runat="server"> находится на главной странице. Приведенный выше код не запускает событие onclick. Если я избавляюсь от главной страницы и добавляю тег формы на страницу, это работает. Тег формы на главной странице не поддерживается, или это должно как-то работать? альтернативный текст http://digitalcopy.warnerbros.com/images/mainmenu.gif?provider=00079&disc=03403AAA-1D20-47F2-91FA-5EE632832659

Ответы [ 16 ]

11 голосов
/ 25 апреля 2009

Вы также можете проверить, не запускает ли ваша ImageButton проверку. Если он устанавливает для свойства CausesValidation значение false (конечно, если это имеет смысл).

4 голосов
/ 26 августа 2009

У меня была похожая проблема (другой сценарий). Я использовал Page.RegisterRequiresRaiseEvent(ImageButton), и мое событие onclick начало срабатывать. Почему я должен был это сделать? Я не знаю.

3 голосов
/ 10 апреля 2013

Моим решением было установить значение CausesValidation в ImageButton на false.

2 голосов
/ 07 марта 2011

ib.ID = i + ":" + j;

следует изменить на

ib.ID = i.toString()+":"+j.toString();

Если это все еще не работает, попробуйте использовать StringBuilder для создания идентификатора и назначить его позже свойству ib.ID

2 голосов
/ 17 сентября 2009

У меня похожая проблема с кнопкой изображения и я нашел основную причину. Вы используете

"ib.ID = i + ":" + j;"

в качестве идентификатора ImageButton, ":" является недопустимым именем, так как вы создаете его программно, ASP.NET позволяет его создавать.

Во время выполнения, если вы посмотрите на исходный HTML-код страницы, вы увидите, что специальные символы либо игнорируются, либо заменяются на "_". Таким образом, страница не может найти правильный элемент управления, поэтому событие не сработает. Попробуйте изменить имя обычным текстом, событие сработает.

0 голосов
/ 22 августа 2016

Это решение, которое сработало для меня

Если вы связываете элементы управления с привязкой к данным, используйте OnCommand attr вместо OnClick attr

0 голосов
/ 20 мая 2015

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

0 голосов
/ 20 декабря 2014

Я только что решил похожую проблему, когда OutputCache был включен. При изменении с asp:ImageButton на asp:Button событие запускается правильно. Возможно, asp:ImageButton имеет какую-то ошибку в OutputCache.

0 голосов
/ 12 марта 2014

Я столкнулся с той же проблемой, когда я динамически создавал ImageButton, и щелчок этого события не вызывался. следовательно, я создал кнопку Image в if (IsPostBack). Сейчас работает нормально. И даже если страница обновится, кнопка ImageButton будет сохранена.

0 голосов
/ 04 апреля 2013

У меня была та же проблема, что OnClick событие ImageButton не запускалось. Но реальная проблема была на уровне формы, у меня было onSubmit="return false;"

...