ASP.NET Button click non catturati (pulsante nel controllo utente che viene caricato dinamicamente in ripetitore)

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

Domanda

ho scritto un controllo utente che cattura alcuni input dell'utente e dispone di un pulsante Salva per salvarlo al DB. Io uso un ripetitore per rendere un certo numero di questi controlli nella pagina - immaginare un elenco di domande a scelta multipla con un pulsante Salva per ogni domanda

.

Sto caricando il controllo utente all'interno dell'evento ItemDataBound del ripetitore come questo (codice semplificato):

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

A proposito, devo caricare il controllo in fase di esecuzione piuttosto che specificare nella ItemTemplate perché un controllo diverso potrebbe essere usato per ogni riga.

Nel controllo utente, c'è un LinkButton in questo modo:

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

... e un clic gestore del pulsante in questo modo:

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

Il problema è che quando il pulsante Salva viene cliccato, i posti pagina indietro, ma lbnUpdate_Click non viene chiamato. L'evento Page_Load della pagina stessa è chiamata comunque.

I dovrebbe menzionare che il ripetitore è parte di un controllo utente, e che il controllo utente viene caricato all'interno di un altro controllo utente (questo è un sito DotNetNuke che fa uso pesante di controlli utente). I Salva collegamento pulsante appare così:

javascript:__doPostBack('dnn$ctr498$AssignmentsList$rptAssignments$ctl04$ctl00$lbnUpdate','')
È stato utile?

Soluzione

Questo problema esemplifica come webforms stesso furbo.

È necessario ricostituire il ripetitore, sia per ri-vincolante o ViewState, di avere sotto-controlli generano eventi. Il prezzo da pagare è o un altro viaggio per la vostra fonte di dati o tutti i dati ridondanti memorizzati sul client nel ViewState. Vergognoso!

Altri suggerimenti

Ho avuto un problema simile, una volta che potrebbe essere la stessa cosa.

In breve, dal momento che si sta creando in modo dinamico i pulsanti, dopo il postback non esistono . Così, quando ASP.NET Webforms guarda per l'evento, non può trovare qualsiasi cosa.

Quando si fa il tuo ripetitore ottiene databound? Provare a rendere i pulsanti alla pagina di nuovo nel postback (anche come test) per vedere se questo fa il trucco.

Sono gli ID del UserControl stesso su ogni postback?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top