Frage

Ich brauche einige JavaScript in einem WebControl basierend auf einiger Verarbeitung und einige Eigenschaften ausgeben, die der Verbraucher einstellen kann, ist es auf der Last der Seite tun wird zu früh.

Wenn der letzte ist, kann ich anrufen und es Registerclient noch haben Ausgang auf der Seite?

War es hilfreich?

Lösung

OnPreRender

oder, wenn Sie außer Kraft setzen Render .... vor "base.Render"

Aufruf

Andere Tipps

Alte Frage, aber ich vor kurzem mit diesem behandelt, so Tim Antwort ein bisschen mehr Klarheit zu geben, und das Bit von Fehlinformationen aufzuräumen:

Wenn Sie verwenden wie Registerclient Sie fragen, dann werden Ihre Skripte Ausgabe während ClientScriptManager.RenderClientScriptBlocks sein, die während Page.BeginFormRender genannt wird -. Aber es ist tatsächlich durch die Form, nicht von der Seite selbst genannt

Hier ist die Reihenfolge:

  • Page.ProcessRequestMain (wenn es den Abschnitt machen erreicht) ruft
  • (Seite der Basisklasse) Control.RenderControl die Anrufe
  • Control.RenderChildren, die durch alle untergeordneten Steuerelemente Schleifen und schließlich ruft
  • HtmlForm.RenderControl die Anrufe
  • HtmlForm.RenderChildren das ist, was wir kümmern uns um

Von Reflektor:

protected internal override void RenderChildren(HtmlTextWriter writer)
{
    Page page = this.Page;
    if (page != null)
    {
        page.OnFormRender();
        page.BeginFormRender(writer, this.UniqueID);
    }
    base.RenderChildren(writer);
    if (page != null)
    {
        page.EndFormRender(writer, this.UniqueID);
        page.OnFormPostRender();
    }
}

Beachten Sie die Anrufe zu page.BeginFormRender und page.EndFormRender. Zwischen ihnen, ruft das Formular es base.RenderChildren ist, die die Render-Methode schließlich rufen auf Ihrem benutzerdefinierten User Control. So wahr zu sein, um Ihre ursprüngliche Frage, Sie nicht mit dem ClientScriptBlocks Teil von Skripten zu jeder Zeit während jeden Kindes Kontrolle der Render-Sequenz in Wechselwirkung treten können, da sie bereits ausgegeben in die Antwortstream sind. Sie können Skripte während der Render-Sequenz zu diesem Block hinzufügen, wenn Sie Renders in der Seite Methode sind, bevor Sie base.Render nennen, wie Tim erwähnt, aber dies bei einem Kind Kontrolle jeglicher Art nicht funktioniert .

Wenn die Render-Sequenz alles, was Sie haben, mit zu arbeiten (dies ist die Situation, die ich in bin), dann können Sie ClientScript.RegisterStartupScript während des Steuerelements verwenden Render, da die RenderClientStartupScripts während page.EndFormRender genannt wird, die geschieht nach Ihre Kontrollen zu machen gesagt wird, wie Sie oben im Code sehen können.

Logisch, Ihr braucht Startskript sowie auf der Seite registriert gerendert werden, so dass die Page_PreRender Veranstaltung eine gute Wette zu sein scheint. Danach wird die HTML und Script für die Seite ‚verschlossen‘.

Auch auf der Hauptseite, können Sie es während PreRender nennen. Jede Kontrolle der Render-Funktion wird nach der Hauptseite des PreRender genannt, so dass die Render-Funktion ein sicherer Ort sein würde.

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