Botón ASP.NET Haga clic en No atrapar (botón en el control del usuario que se carga dinámicamente en repetidor)

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

Pregunta

He escrito un control de usuario que captura alguna entrada del usuario y tiene un botón Guardar para guardarlo en el DB. Utilizo un repetidor para representar varios de estos controles en la página: imagine una lista de preguntas de opción múltiple con un botón Guardar por cada pregunta.

Estoy cargando el control del usuario dentro del evento ElementDatabound del repetidor como este (código simplificado):

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

Para su información, necesito cargar el control en tiempo de ejecución en lugar de especificarlo en el elemento de placa porque podría usarse un control diferente para cada fila.

En el control del usuario, hay un LinkButton como este:

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

... y un controlador de clics de botón como este:

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

El problema es que cuando se hace clic en el botón Guardar, la página publica, pero no se llama a Lbnupdate_Click. Sin embargo, se llama el evento Page_Load de la página en sí.

Debo mencionar que el repetidor es parte de un control de usuario, y que el control del usuario se carga dentro de otro control del usuario (este es un sitio DotNetNuke que hace un uso pesado de los controles de usuario). El enlace de botón Guardar se ve así:

javascript:__doPostBack('dnn$ctr498$AssignmentsList$rptAssignments$ctl04$ctl00$lbnUpdate','')
¿Fue útil?

Solución

Este problema ejemplifica cómo Webforms se sobresalta en sí.

Debe reconstituir el repetidor, ya sea reiniciando o desde ViewState, para que los subtrolos aumenten los eventos. El precio que paga es otro viaje a su fuente de datos o todos los datos redundantes almacenados en el cliente en el Estado View. ¡Vergonzoso!

Otros consejos

Tuve un problema similar una vez que podría ser lo mismo.

En resumen, ya que está creando dinámicamente los botones, después de la posterior Ellos no existen. Por lo tanto, cuando ASP.NET WebForms busca el evento, no puede encontrar nada.

¿Cuándo obtiene su repetidor de datos? Intente volver a colocar los botones en la página en la devolución de la devolución (incluso como una prueba) para ver si eso hace el truco.

¿Son las identificaciones de UserControl iguales en cada devolución de devolución?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top