Frage

Welche Möglichkeiten habe ich für die Erstellung von Stateful dynamische Inhalte in einer ASP.Net Seite?

Hier ist mein Szenario. Ich habe eine Seite, die mehrere verschachtelte Inhaltsbereiche hat. Die oberste Ebene sind Maßnahmen gebunden an einen Funktionsbereich Catalog, Subscriptions, Settings.

Wenn Sie auf die Funktions Aktion klicken, möchte ich Inhalte spezifisch dynamisch hinzufügen, um diese Aktion. Wenn zum Beispiel Katalog geklickt wird, möchte ich mit den Katalogordner und Dateien, und einen Bereich auf der rechten Seite für Details auf einen Baum angezeigt werden soll.

Wenn ein Benutzer klickt auf dem Baum, ich will ein kontextsensitives Detail im Detailbereich zu laden (wie Eigenschaften oder Optionen, um die Dateien zu verwalten).


Ich begann mit UserControls. Sie arbeiteten gut, solange ich alles in die Seite gehalten Laden, und nie ließ man verschwinden. Sobald man verschwunden, ViewState für die Seite explodierte, weil die Ansicht Zustand Baum ungültig ist.

(Ich wollte nicht, Laden Sachen in meine Seite halten, weil ich will nicht die Antworten zu groß sein)

Also, mein nächster Ansatz war meine dynamischen Regionen mit IFrames zu ersetzen. Dann stattdessen ein UserControl instanziieren, würde ich ändern, nur die Quelle auf meinem IFrame. Da der Inhalt der IFrames unabhängige Seiten waren habe ich nicht in irgendwelche ViewState Probleme ausgeführt werden.

Aber, ich bin besorgt darüber, dass IFrames eine schlechtes Design Wahl sein könnte, aber nicht vollständig verstehen, warum. Die Seite ist nicht öffentlich, so dass Suchmaschinen sind kein Problem.


So, endlich auf meine Frage.

Was sind meine Optionen für dieses Szenario? Wenn ich eine Ajax-Lösung (jQuery) wählen, muss ich meinen eigenen Viewstate beibehalten? Gibt es noch andere Überlegungen sollte ich berücksichtigen?

War es hilfreich?

Lösung

Einige andere Optionen:

  1. Inhalt nur erscheint dynamisch. Sie laden genug Steuerelemente auf der Seite etwas zu behandeln und nur tatsächlich zeigen , was Sie brauchen. Das spart eine Menge Ärger mit Blick Staat Unordnung und solche, sondern bedeutet, dass Ihre Seite einen größeren Platzbedarf hat.
  2. Fügen Sie Steuerelemente der Seite dynamisch. Sie haben bereits mit diesem gespielt, so haben Sie einige der Fragen hier zu sehen. Denken Sie daran, dass der Ort, um Ihre dynamische Steuerelemente für Postbacks zu erstellen ist in der Page_Init () Ereignis, und dass, wenn Sie wollen, dass sie Stateful sein, müssen Sie irgendwo diesen Zustand zu halten. Ich empfehle eine Datenbank.

Andere Tipps

Steuerung, die dynamisch nicht besteht in dem Ansichtszustand hinzugefügt werden, und dies ist der Grund, dass es nicht, wenn Sie verwenden AJAX oder iFrames oder was auch immer ist egal.

Eine mögliche Behelfslösung ist neu zu bevölkern Kontrollen auf Postbacks. Das Problem dabei ist die Seite Lebenszyklus (vereinfacht) ist:

  1. Initialisieren
    • Loadviewstate
    • Lastpostback-Daten
    • Anrufsteuerung laden Ereignisse
    • Anruf Load-Ereignis
    • Anrufsteuerungsereignisse
    • Steuer PreRender
    • PreRender
    • Save
    • Unload

Was dies bedeutet, ist der einzige Ort, erneut hinzufügen Ihre dynamische Steuerelemente wird initialisieren - anders angegeben sind Daten (oder Ansichtszustand Informationen) nicht in diese Steuerung geladen. Aber oft, weil Viewstat / Postback-Daten noch nicht verfügbar ist in initialisieren, Ihr Code nicht über die Informationen, die es braucht, um herauszufinden, welchen Bedarf hinzugefügt werden, steuert.

Die einzige andere Behelfslösung habe ich in dieser Situation gefunden ist ein 3rd-Party-Steuerelement aufgerufen, verwenden

Sie haben eine Reihe von verschiedenen Optionen bekommen, und ja, IFrames waren eine schlechtes Design Wahl.

Die erste Option ist die AJAX-Lösung. Und damit ist es nicht wirklich ein Ansichtszustand Szenario, es ist nur du bist Daten vorbei hin und her mit dem Webserver, den Aufbau der Benutzeroberfläche im Fluge nach Bedarf.

Die nächste Option ist, um dynamisch die Steuerelemente hinzufügen, die Sie für einen bestimmten Post benötigen, jedes Mal. Die Art und Weise dies funktionieren würde, ist, dass zu Beginn des Lebenszyklus der Seite Sie die Seite genau neu erstellen müssen würde, wie es war das letzte Mal gesendet, und dann alle nicht benötigten Kontrollen auskippen, und bauen die, die gerade die wollen .

Eine dritte Möglichkeit wäre, Masterseiten zu verwenden. Ihr Top-Level-Content auf der Master-Seite könnte selbst und hat Links zu verschiedenen Seiten innerhalb der Website.

Ich bin sicher, dass genügend Zeit, ich mit mehr kommen konnte, aber diese 3 erschien nur Ihr Problem beim Lesen.

dynamische Kontrollen und Ansichtszustand nicht gut mischen, wie oben erwähnt - aber das ist eine gute Sache, denn selbst wenn sie die Ansichtszustand für eine komplexe dynamische Seite täte, würde so aufgebläht bekommen, dass die Leistung auf Null verringern würde

verwenden Ajax [mag ich AJAX PRO, weil es sehr einfach zu bedienen ist] und verwalten die Seite selbst angeben [in der Sitzung, Datenbanktabellen, oder was auch immer funktioniert für Ihr Szenario]. Dies wird etwas komplizierter sein, in Gang zu bringen, aber die Ergebnisse werden effiziente und reaktionsschnell sein: Jede Seite kann nur aktualisiert werden, was sich ändern muss, und Sie werden nicht einen riesigen Ansichtszustand Schnur hin und her die ganze Zeit

scroll top