2009-11-24 7 views
0

J'ai une page.aspx. Je voudrais injecter une balise <script> dans le flux de réponse de Page.aspx, après avoir écrit sa sortie. Comment pourrais-je faire ce formulaire dans le codebehind de Page?ASP.NET: Ajout à la réponse HTTP

Si je fais ceci:

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.ClientScript.RegisterClientScriptInclude 
        ("dfasfds", this.Request.Path.Replace(".aspx", ".js")); 
    } 

Ensuite, le script apparaît dans la réponse HTML, mais pas à la fin.

Si je fais ceci:

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.Response.Flush(); 
     this.Response.Write(.../*my javascript*/...); 
    } 

Ensuite, la balise de script < > apparaît à tout beginnning du document, sur la première ligne.

+0

un coup d'oeil à http://stackoverflow.com/questions/1726962/how-to-add-script-codes-before-the-body-tag-asp-net/1727004#1727004 – kristian

Répondre

0
string key = "MyScript"; 
string src = Request.Path.Replace(".aspx", ".js"); 
string script = "<script type=\"text/javascript\" src=\"" + src + "\"></script>"; 
ClientScript.RegisterStartupScript(GetType(), key, script); 
1

Le contenu de votre page n'est pas écrit dans le flux de réponse avant la phase de rendu. Si vous appelez Response.Flush() dans Page_Load(), il n'y a rien encore à vider. Au lieu de cela, vous pouvez essayer d'appeler Response.Write() à partir de l'événement Page_Unload(); Je suis assez sûr que le flux de réponse est encore en vie à ce moment-là. Toutefois, le résultat de cette opération serait d'avoir votre script après le tag. Il serait plus correct de faire quelque chose comme utiliser une page principale, et avoir la balise de script dans le balisage là, ou éventuellement l'insérer en utilisant un contrôle utilisateur.

0

Je n'ai pas essayé cela, mais je suppose que vous exécutez l'écriture dans la mauvaise étape du cycle de vie .NET. Page_Load se produit avant que tout le contenu soit rendu, ainsi votre écriture() insérera le texte en haut de la page. Je suppose que vous voulez faire cela dans PreRender:

"Utilisez [PreRender] pour apporter les dernières modifications au contenu de la page ou de ses contrôles avant le début de la phase de rendu."

https://msdn.microsoft.com/en-us/library/ms178472.aspx

Questions connexes