ASP.NET -Schaltfläche Klicken Sie nicht gefangen (Schaltfläche in der Benutzersteuerung, die in Repeater dynamisch geladen wird)

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

Frage

Ich habe eine Benutzerkontrolle geschrieben, die einige Benutzereingaben erfasst und eine Speicherschaltfläche hat, um sie auf der DB zu speichern. Ich verwende einen Repeater, um eine Reihe dieser Steuerelemente auf der Seite zu rendern.

Ich lade die Benutzersteuerung in das Repeaters itemDatabound -Ereignis wie dieses (Code vereinfacht):

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

Zu Ihrer Information, ich muss die Steuerung zur Laufzeit laden, anstatt sie in der ItemTemplate anzugeben, da für jede Zeile eine andere Steuerung verwendet werden kann.

Bei der Benutzersteuerung gibt es einen Linkbutton wie folgt:

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

... und eine Schaltfläche Klicken Sie auf Handler wie folgt:

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

Das Problem ist, dass beim Klicken auf die Schaltfläche Speichern die Seite zurückgibt, LBNUPDATE_CLICK nicht aufgerufen wird. Das Ereignis von Page_load der Seite selbst wird jedoch aufgerufen.

Ich sollte erwähnen, dass der Repeater Teil einer Benutzersteuerung ist und dass die Benutzersteuerung in eine andere Benutzersteuerung geladen wird (dies ist eine DotNeNuke -Site, die die Benutzersteuerung stark nutzt). Der Link zur Schaltfläche Speichern sieht folgt aus:

javascript:__doPostBack('dnn$ctr498$AssignmentsList$rptAssignments$ctl04$ctl00$lbnUpdate','')
War es hilfreich?

Lösung

Dieses Problem veranschaulicht, wie WebForts selbst überlistet.

Sie müssen den Repeater entweder durch Wiederaufbindung oder von ViewState neu rekonstituieren, um Unterkontrolle Ereignisse zu erhöhen. Der Preis, den Sie zahlen, ist entweder eine weitere Reise zu Ihrer Datenquelle oder all diese redundanten Daten, die auf dem Kunden im ViewState gespeichert sind. Beschämend!

Andere Tipps

Ich hatte ein ähnliches Problem, sobald das dasselbe sein könnte.

Kurz gesagt, da Sie die Schaltflächen nach dem Postback dynamisch erstellen Sie existieren nicht. Wenn ASP.NET WebForms nach dem Ereignis sucht, kann es nichts finden.

Wann erhält Ihr Repeater Datenbad? Versuchen Sie, die Schaltflächen im Postback erneut auf die Seite zu rendern (auch als Test), um festzustellen, ob dies den Trick macht.

Sind die IDs der UserControl bei jedem Postback gleich?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top