Bouton ASP.NET cliquez pas pris (bouton dans le contrôle de l'utilisateur qui est chargé dynamiquement dans le répéteur)

StackOverflow https://stackoverflow.com/questions/2978386

Question

J'ai écrit un contrôle utilisateur qui capture une entrée d'utilisateur et a un bouton Enregistrer pour enregistrer à la DB. J'utilise un répéteur pour rendre un certain nombre de ces contrôles sur la page - imaginez une liste de questions à choix multiples avec un bouton Enregistrer par chaque question

.

Je chargeais le contrôle de l'utilisateur à l'intérieur de l'événement ItemDataBound du répéteur comme celui-ci (code simplifié):

Protected Sub rptAssignments_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptAssignments.ItemDataBound

    Dim CurrentAssignment As Assignment = DirectCast(e.Item.DataItem, Assignment)
    Dim ctl As UA = CType(LoadControl("~\Controls\UA.ascx"), UA)

    ctl.AssignmentID = CurrentAssignment.AssignmentID
    ctl.Assignment = CurrentAssignment.AssignmentName
    ctl.EnableViewState = True

    e.Item.Controls.Add(ctl)
End Sub

Pour votre information, je dois charger le contrôle à l'exécution plutôt que de le spécifier dans le ItemTemplate car un contrôle différent pourrait être utilisé pour chaque ligne.

Dans le contrôle de l'utilisateur, il y a un linkbutton comme ceci:

<asp:LinkButton ID="lbnUpdate" runat="server" Text="Update" OnClick="lbnUpdate_Click" />

... et un bouton gestionnaire de clic comme ceci:

Protected Sub lbnUpdate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles lbnUpdate.Click
   ' my code to update the DB
End Sub

Le problème est que lorsque le bouton Enregistrer est cliqué, les messages de dernière page, mais lbnUpdate_Click n'est pas appelé. L'événement Page_Load de la page elle-même est appelée cependant.

Je dois mentionner que le répéteur fait partie d'un contrôle utilisateur, et que le contrôle de l'utilisateur est chargé dans un autre contrôle utilisateur (ce qui est un site DotNetNuke qui fait un usage intensif des contrôles utilisateur). Le look de lien bouton Enregistrer comme ceci:

javascript:__doPostBack('dnn$ctr498$AssignmentsList$rptAssignments$ctl04$ctl00$lbnUpdate','')
Était-ce utile?

La solution

Cela illustre problème comment webforms s'outsmarts.

Vous devez reconstituer le répéteur, soit d'avoir par re-liaison ou de viewstate, sous-contrôles soulèvent des événements. Le prix que vous payez est soit un autre voyage à votre source de données ou toutes les données redondantes stockées sur le client dans le viewstate. ! Honteux

Autres conseils

J'ai eu un problème similaire une fois que pourrait être la même chose.

En bref, puisque vous créez dynamiquement les boutons, après la postback ils n'existent pas . Ainsi, lorsque ASP.NET WebForms semble pour l'événement, il ne peut pas trouver quoi que ce soit.

Quand votre répéteur se databound? Essayez les boutons à rendre à nouveau la page dans le postback (même un test) pour voir si cela fait le tour.

sont les ID du UserControl même sur chaque postback?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top