Не удается получить доступ к событию Checkbox CheckChanged внутри DataList

У меня есть флажки внутри шаблона элемента списка данных. Но я не могу получить доступ к событию chechedchange флажка. Я установил AutoPostBack как истину. Но все еще не могу запустить событие. Вот мои коды.

<ul class="commentlist" >
                    <asp:DataList ID="datalistYorum" runat="server" DataSourceID="ods_yorumlar"  
                            RepeatLayout="Flow" ItemStyle-Wrap="True" RepeatDirection="Horizontal" 
                            onitemcreated="datalistYorum_ItemCreated" 
                            onitemdatabound="datalistYorum_ItemDataBound" onload="datalistYorum_Load" 
                            ondatabinding="datalistYorum_DataBinding">
                      <ItemTemplate>
                        <li class="comment">
                         <div class="comment-body">
                            <div class="comment-author vcard">
                                <div class="lightbox-photo">
                                    <a class="image-overlay" href='<%# "Foto/profil/foto_buyuk/" + Eval("Yorum_Profil_Foto_Buyuk") %>' data-rel="prettyPhoto" title='<%# Eval("Yorum_UserName")%>'>
                                    <img src='<%# "Foto/profil/foto_kucuk/" + Eval("Yorum_Profil_Foto_Kucuk") %>' alt='<%# Eval("Yorum_UserName")%>' class="avatar" />
                                    </a>
                                 </div>
                                 <cite class="fn"><asp:HyperLink ID="linkProfil" runat="server" Text='<%# Eval("Yorum_UserName")%>' NavigateUrl='<%# "~/profil.aspx?user_id="+ Eval("User_ID") %>'></asp:HyperLink></cite>
                                 <cite class="fn-time"><%# Eval("Yorum_Gecen_Zaman")%></cite> 
                            </div>
                            <p><%# Eval("Yorum_Text")%></p>
                             <div class="reply"><asp:CheckBox ID="checkLike" runat="server" CssClass="comment-reply-link"   AutoPostBack="True" />
                                 <asp:ToggleButtonExtender ID="ToggleButtonLike" runat="server" TargetControlID ="checkLike" ImageHeight="32" ImageWidth="52" CheckedImageUrl="~/images/liked.png" UncheckedImageUrl="~/images/like.png" CheckedImageAlternateText="Like">
                                 </asp:ToggleButtonExtender>
                             </div>
                    <div class="reply"><asp:CheckBox ID="checkDislike" runat="server" CssClass="comment-reply-link"  AutoPostBack="True" />
                     <asp:ToggleButtonExtender ID="ToggleButtonDislike" runat="server" TargetControlID="checkDislike" ImageHeight="32" ImageWidth="62" UncheckedImageUrl="~/images/dislike.png" CheckedImageUrl="~/images/disliked.png">
                     </asp:ToggleButtonExtender>
                     </div>
                      </div>
                       </li>
                        </ItemTemplate>

                        </asp:DataList>
                       <asp:ObjectDataSource ID="ods_yorumlar" runat="server" 
                            DataObjectTypeName="Yorum" TypeName="yonet" SelectMethod="PostYorumlariGetir" 
                            ondatabinding="ods_yorumlar_DataBinding" 
                            onselecting="ods_yorumlar_Selecting" onselected="ods_yorumlar_Selected">
                       <SelectParameters>

и код позади:

   protected void datalistYorum_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
        {
            CheckBox checkLike = (CheckBox)e.Item.FindControl("checkLike");
            CheckBox checkDislike = (CheckBox)e.Item.FindControl("checkDislike");

            if (!Page.IsPostBack)
            {
                checkLike.CheckedChanged += new EventHandler(checkLike_CheckedChanged);
                checkDislike.CheckedChanged += new EventHandler(checkDislike_CheckedChanged);
            }
        }
    }

 public void checkLike_CheckedChanged(object sender, EventArgs e)
    { 
        object user_id =  Membership.GetUser().ProviderUserKey;
        DateTime event_date = DateTime.Now;
        CheckBox checkLike = (CheckBox)datalistYorum.FindControl("checkLike");
         if (checkLike.Checked == true)
        {
            try
            {
                using (SqlConnection baglanti = new SqlConnection(ConfigurationManager.ConnectionStrings["xxx"].ConnectionString.ToString()))
                {

                    SqlCommand komut = new SqlCommand("sp_likeordislike", baglanti);
                    komut.CommandType = CommandType.StoredProcedure;
                    komut.Parameters.AddWithValue("@comment",1);
                    komut.Parameters.AddWithValue("@user_id", user_id);
                    komut.Parameters.AddWithValue("@likeordislike", 1);
                    komut.Parameters.AddWithValue("@event_date", event_date);
                    baglanti.Open();
                    komut.ExecuteNonQuery();
                    baglanti.Close();
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

    }

Но ничего не происходит. Спасибо!


person serdar    schedule 09.04.2013    source источник
comment
Вы также можете опубликовать свой код pageload event? Вы привязываете свой datalist к каждой обратной передаче?   -  person Praveen Nambiar    schedule 09.04.2013
comment
Событие загрузки страницы не включает ничего о списке данных. И нет, я не привязываюсь к каждой обратной передаче. Но здесь мои коды событий загрузки страницы `protected void Page_Load (отправитель объекта, EventArgs e) { if (User.Identity.IsAuthenticated) { FormView frmYorumAt = ( FormView)loginYorumAtView.FindControl(frmYorumAt); } }` @PraveenNambiar   -  person serdar    schedule 09.04.2013
comment
я предложил вам преобразовать namingcontainer в datalist. будет работать с datalist   -  person Praveen Nambiar    schedule 09.04.2013
comment
Спасибо @PraveenNambiar Можете ли вы дать мне ссылку на пример использования namingcontainer?   -  person serdar    schedule 09.04.2013


Ответы (2)


Если вы не добавляете обработчик событий для флажка «checklike» в Page_Load, это выглядит так, как будто назначение отсутствует.

Измените объявление флажка «checklike» следующим образом:

<asp:CheckBox ID="checkLike" runat="server" CssClass="comment-reply-link" AutoPostBack="True" OnCheckedChanged="checkLike_CheckedChanged" />
person FastGeek    schedule 09.04.2013

Попробуй это:

protected void checkDislike_CheckedChanged(Object sender, EventArgs e)
{
    CheckBox cb = (CheckBox) sender;
    DataListItem item = (DataListItem) cb.NamingContainer;
    //
    //
}

Ваша разметка будет выглядеть так:

<asp:CheckBox ID="checkDislike" runat="server" CssClass="comment-reply-link"  AutoPostBack="True" OnCheckedChanged="checkDislike_CheckedChanged" />

Прежде чем пробовать этот комментарий, удалите все остальные checkbox events

Проверьте это ссылка:

person Praveen Nambiar    schedule 09.04.2013
comment
Моя проблема в том, что я не могу получить доступ к событию ChekedChanged. Так что эти коды не могут мне помочь. Но я пробовал, и ничего не изменилось. - person serdar; 10.04.2013
comment
проверьте ссылку на мой ответ... он также поддерживается datalist. - person Praveen Nambiar; 10.04.2013