Ich habe ein Menü usercontrol namens LeftMenu, die eine Aufzählung von linkitems hat. Es ist auf der ascx Seite als solche:Benutzersteuerung Ereignishandler bei Postback verloren
<asp:BulletedList ID="PublisherList" DisplayMode="LinkButton" OnClick="PublisherList_Click" cssClass="Menu" runat="server"></asp:BulletedList>
ich die Liste in der page_load unter if(!isPostBack)
Databind
ich auf einer Seite ein Problem habe, das die Steuerung lädt. Wenn die Seite zum ersten Mal geladen wird, wird der Ereignishandler ausgelöst. Wenn die Seite jedoch zurücksetzt, wird sie nicht mehr ausgelöst, und in IE8 wird beim Debuggen "Microsoft JScript-Laufzeitfehler: Objekt erwartet" in Visual Studio auf "__doPostBack ('LeftMenu $ PublisherList', '0') . " In FF bekomme ich den Fehler nicht, aber nichts passiert. Ich nicht Laden der Steuerung dynamisch, es auf der Aspx-Seite geladen wird mit:
<%@ Register TagPrefix="Standards" TagName="LeftMenu" Src="LeftMenu.ascx" %>
<Standards:LeftMenu ID="LeftMenu" runat="server"/>
Irgendwelche Ideen, wo ich den Event-Handler bin zu verlieren?
Ich habe gerade festgestellt, dass dies auf einer anderen Benutzersteuerung geschieht, die ich auch habe. Ein Textfeld und eine Schaltfläche und ich verwende die Standardschaltfläche, um sicherzustellen, dass die Eingabetaste gedrückt wird, um diese Schaltfläche zu verwenden. .Net wandelt diese in der html:
<div id="SearchBarInclude_SearchBar" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'SearchBarInclude_QuickSearchButton')">
so, sobald ich einen Schlüssel in das Feld eingeben ich ein Javascript-Fehler auf der Linie erhalten sagen „Objekt erwartet.“ Es scheint, als ob die beiden Probleme miteinander zusammenhängen.
Nochmal bearbeiten: Ich denke, ich muss klären. Es ist nicht so, dass ich auf den Menüeintrag klicke und das ausgewählte Element beim Postback nicht finden kann. Ich habe diese Suchseite mit der linken Navigation darauf und dann ist der Hauptinhalt der Seite etwas, das ein Postback verursacht. Mit diesem Postback ist alles in Ordnung. Sobald diese Seite zurückgeschickt wurde, bekomme ich jetzt, wenn ich auf die Aufzählungsliste in der linken Navigationsleiste klicke, einen Javascriptfehler und es schlägt fehl. Die page_init für das LeftMenu-Steuerelement wird nie aufgerufen.
Was ist, wenn das Menü und die Liste 100 oder 1000 Elemente enthalten? Sollten sie noch im View-Zustand gespeichert sein? – Phaedrus
Im Idealfall stirbt ViewState einen schrecklichen Tod und kommt nie wieder zurück, so dass diese Mysterien der PostBacks nie ihre hässlichen Köpfe aufstellen und unsere Seiten leicht und luftig bleiben ;-) Das ist gesagt, das ist ein linkes Navigationsmenü auf einer Website, also bezweifle ich, dass es mehr als ein paar Sachen gibt. Offensichtlich, wenn dies eine Art von Datenbankaufruf wäre, würden Sie es zwischenspeichern und das könnte dazu beitragen, den Seitenaufruf hell zu halten und ViewState nicht zu benötigen, aber Sie können nicht garantieren, dass die Liste, an der der PostBack arbeitet, dieselbe ist als das Original, das der Benutzer gesehen hat (wenn der Cache abläuft). –
Das Entfernen von if (! IsPostBack) {...} hilft nicht. Die Daten werden sich kaum ändern, sollte ich sie noch im Viewstate speichern? –