Bouton dans un relais ne déclenche pas ItemCommand
Pourquoi un bouton à l'intérieur d'un Répéteur pas de feu, la Répétition du ItemCommand événement? Est-il un moyen de le forcer à le faire? L'état d'affichage est Activé.
Dans le code ci-dessous, btnApprove et btnDelete sont les boutons en question:
<asp:Repeater runat="server" ID="rpt1" onitemdatabound="rpt1_ItemDataBound" onitemcommand="rpt1_ItemCommand" >
<ItemTemplate>
<table width="100%" style="margin-bottom:6px;">
<tr>
<td>
<asp:CheckBox ID="chkSelected" runat="server" Text=" " TextAlign="Right"/> Select
<asp:Button ID="btnApprove" runat="server" Width="80px" Text="Approve" />
<asp:Button ID="btnDelete" runat="server" Width="80px" Text="Delete" />
</td>
</tr>
<tr>
<td align="right">
<asp:Label ID="lblCommentStatus" runat="server" Text="Label"></asp:Label>
</td>
</tr>
</table>
<table width="100%" style="margin-top:6px;">
<tr>
<td><asp:Label ID="lblAuthorName" runat="server" Text="Author: " Width="60px"></asp:Label></td>
<td><asp:TextBox ID="txtAuthorName" runat="server" Width="250px"></asp:TextBox></td>
<td style="padding-left: 30px;"><asp:Label ID="lblAuthorLocation" runat="server" Text="Location: " Width="70px"></asp:Label></td>
<td><asp:TextBox ID="txtAuthorLocation" runat="server" Width="250px"></asp:TextBox></td>
</tr>
</table>
Title: <asp:TextBox ID="txtTitle" runat="server" Width="640px" Enabled="False"></asp:TextBox>
Body: <asp:TextBox ID="txtBody" runat="server" Width="640px" TextMode="MultiLine" Height="60px" Enabled="False"></asp:TextBox>
<table width="100%" style="margin-top:6px;">
<tr>
<td><asp:Label ID="lblVotes" runat="server" Text="Votes: " Width="80px"></asp:Label></td>
<td><asp:Label ID="lblVotesCount" runat="server" Text="" Width="600px"></asp:Label></td>
</tr>
</table>
<hr style="margin-top:20px; margin-bottom:20px;" />
</ItemTemplate>
</asp:Repeater>
///<summary>
///Handles the ItemCommand event of the rpt1 control.
///</summary>
///<param name="source">The source of the event.</param>
///<param name="e">The <see cref="System.Web.UI.WebControls.RepeaterCommandEventArgs"/> instance containing the event data.</param>
protected void rpt1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
var c1 = CommentRepository.GetById(Convert.ToUInt64(e.CommandArgument.ToString()));
if (e.CommandName == "approve")
{
c1.Approved = true;
c1.ApprovationUserId = WebAdminContext.RelatedUserId;
}
if (e.CommandName == "reject")
{
c1.Approved = false;
c1.ApprovationUserId = 0;
}
if (e.CommandName == "delete")
{
c1.Deleted = true;
c1.DeletionUserId = WebAdminContext.RelatedUserId;
}
if (e.CommandName == "restore")
{
c1.Deleted = false;
c1.DeletionUserId = 0;
}
CommentRepository.Update(c1);
ResetSubSequenceInfo();
BindList();
}
///<summary>
///Binds the list.
///</summary>
private void BindList()
{
_Criteria = lcb1.GenerateCriteriaFromUI();
var sc1 = CommentRepository.Filter(
new FilteringOptions(
EntityListPager1.CurrentSubSequenceInfo,
null,
CommentRepository.GetCriteriaToFilterByTGID(CurrentEntityGEODEReference.GID).And(_Criteria)
)
);
//BIND
rpt1.DataSource = sc1.Items;
rpt1.DataBind();
EntityListPager1.BindToUI(sc1.Info);
}
Peut-être que c'est bientôt temps pour accepter une réponse, si l'un d'eux a résolu le problème. Je suppose que c'était le relier à chaque problème de temps?
OriginalL'auteur Mark Richman | 2010-03-26
Vous devez vous connecter pour publier un commentaire.
Modifier: par d'autres commentaires, on dirait que vous vous êtes re-liaison de la répétition de chaque publication. Lorsque vous faites cela, vous détruisez la
ItemCommand
'source de l'événement - l'original de la Répétition de l'élément associé avec le bouton, le client a cliqué.Vous pouvez re-lier le répétiteur dans votre liste déroulante du gestionnaire, assurez-vous juste de ne pas le faire pendant le chemin d'exécution initiée par votre "Approuver" ou "Supprimer" boutons.
Il y a peut être une autre question, mais vous avez certainement besoin de spécifier les noms de commandes pour vos boutons pour que le code du travail:
Je ne peux pas reproduire le problème: êtes-vous sûr que le
ItemCommand
gestionnaire n'est même pas de tir? À l'aide d'une version légèrement modifiée de votre code, monrpt1_ItemCommand
méthode est clairement en cours d'exécution lorsque je clique sur "Approuver" ou "Supprimer", il n'est tout simplement pas frapper tout cas, parce que ces boutons n'ont pas de noms de commande défini.De toute façon je ne pense pas que l'événement click du bouton est remontée à la répétition. Je surdéfini OnBubbleEvent et le bouton de l'événement n'est pas coincé.
OriginalL'auteur Jeff Sternal
Quand pensez-vous lier votre répéteur? Si vous le faites manuellement, assurez-vous que vous ne lient que, si la page n'est pas une publication.
Préciser un peu plus de code, veuillez
Ajouter plus de code. Quand est BindList() appelée? Dans Page_Load?
J'ai pour lier la liste de publication, parce que la liste est lié à des résultats dont les critères varient en fonction d'un dropdownlist sur la page. L'utilisateur sélectionne "approuvé" ou "supprimé" à partir d'une liste déroulante, les clics de la recherche (publication) et BindList() lie la source de données le pour de nouveaux résultats.
voulez-vous dire que vous êtes re-liaison de la répétition, même sur ces "Approuver" et "Supprimer" bouton de clics? Avez-vous des
EnableEventValidation
ensemble defalse
dans la directive de page? Si oui, c'est la source du problème. (Je peux expliquer plus dans ma réponse si cela est correct.)Vous ne pouvez pas relier la liste de chaque publication. Cela rendra votre RowCommand événement de force d'être perdu. Relier uniquement sur les !Page.IsPostback et dans le gestionnaire d'événements qui sont appelées après OnRowCommand a déjà été traité
OriginalL'auteur citronas
Comme les 2 autres postes de décrire
Et un autre problème que j'ai eu, a été d'avoir propriété EnableViewState sur le Répéteur défini à false, il doit être définie sur true.
OriginalL'auteur Neil