asp.net button-Ereignis nicht auslösen.
Habe ich ein problem. Während ich bin das hinzufügen eines event-handler-code hinter einem button das Ereignis wird nie ausgelöst. Aber wenn ich es hinzufügen aus, wenn die Erstellung der button-tag funktioniert es perfekt und ich Schaffe die Taste code, die hinter und ich Sie es zu Tisch.
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="show table" OnClick="Button1_OnClick" />
<table border="1">
<thead>
<tr>
</tr>
</thead>
<tbody id="tbody" runat="server">
</tbody>
</table>
</div>
</form>
protected void Button1_OnClick(object sender, EventArgs e)
{
var row = new TableRow();
var btnDownload = new Button { ID = "ID", Text = "Click Here" };
btnDownload.Click += ClickEvent;
var cell = new TableCell();
cell.Controls.Add(btnDownload);
row.Controls.Add(cell);
tbody.Controls.Add(row);
}
protected void ClickEvent(object sender, EventArgs e)
{
Debug.WriteLine(((Button)sender).Text);
}
InformationsquelleAutor danarj | 2013-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort auf diese Frage liegt im Verständnis der ASP.NET Seite-Lebenszyklus. ASP.NET rekonstruiert wird eine server-Instanz auf der Seite postback. Sobald der server fertig ist die Verarbeitung und die Antwort wird zurück an den client gesendet, der server-Instanz ist für immer zerstört, und kann nur wiederhergestellt werden, mithilfe einer Kombination der Daten, die im browser (view-Daten /cookies etc) und die verbleibenden server-Daten (session /cache).
Du bist die Verkabelung bis das click-Ereignis der Taste "dynamic" in der Button1_OnClick event-handler. Wenn ASP.NET versucht zu rekonstruieren, wie die Seite beim nächsten postback, wird es nicht laufen diese event-handler (wie Button1 war nicht geklickt) werden, damit der event-handler wird nie verdrahtet, zu erklären, warum es nie läuft. Sie müssen Draht alle Ereignishandler im oder vor dem Page_Load-Ereignishandler, um die capture-control-Ereignis-Handler.
Das ist wahrscheinlich eine bessere option. Wenn Sie die Wahl haben, würde ich auch empfehlen, tun jede neue Entwicklung mit der ASP.NET MVC-framework (oder ähnlich) zugunsten von Web-Formularen. Es ist ziemlich veraltet (das ist eine persönliche Meinung).
Ich würde auf jeden Fall lernen & verwenden ASP.NET MVC, da es neuer und web-Formular zu saugen, danke
InformationsquelleAutor SteveChapman
Bitte akzeptiere das nicht als Antwort, chappoo beantwortet Ihre Frage.
Da ein Ereignis ausgelöst wird, in einer Zeit, die Ihrer Kontrolle existiert nur einmal und verschwinden auf der nächsten
PostBack
. Sie sollten nicht erstellen/löschen Steuerelemente in einemPostBack
Veranstaltung. Dynamische server-Steuerelemente, die erstellt werden müssen, während dieInit
von der Seite.Hier sind einige links zu verstehen ASP.NET und ASP.NET MVC 'life cycles'.
ASP.NET
Können Sie sehen, dass alle Steuerelemente, die muss vorhanden sein, während die
Load
von der Seite, heben Sie die control-Ereignissen (RaiseChangedEvents
) und post-back-events (RaisePostBackEvent
). Zum Beispiel, Seite, die die untergeordneten Steuerelemente -und Bedienelemente sub-controls - erstellt werden (CreateChildControls
), Daten-gebundenen (nachOnPreRender
) und gerendert (RenderControl
) NACH der SeiteLoad
. Manchmal, einige Entwickler nennen dieEnsureChildControls
in die SeiteLoad
zum pre-load der untergeordneten Steuerelemente.http://msdn.microsoft.com/en-us/library/ms178472.aspx
ASP.NET MVC
'Lebenszyklus' ist rein für request-Verarbeitung. Aktionen (Controller) die Darstellung (View) voneinander unabhängig.
ASP.Net MVC - Request-Lebenszyklus
http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/entrypage/be-ahead-of-the-game-poster1
InformationsquelleAutor JoeBilly