2010-08-25 5 views
0

J'essaie de changer le texte d'un asp: textbox et de réduire certains ajaxToolkit: CollapsiblePanelExtenders dans certains contrôles ascx sur ma page ainsi que de générer un fichier généré dynamiquement . Je n'ai aucun problème en réduisant le CollapsiblePanelExtenders et en changeant le texte de la zone de texte à partir du codebehind ou en sortant un fichier. Le problème se pose lorsque je veux que les deux événements se produisent sur la même publication. Malheureusement, l'utilisation de Response.Write annule toutes les autres modifications apportées à la page.Générer le fichier pour le téléchargement en utilisant Response.Write et changer les éléments sur la page

Merci à l'avance

+0

Pourriez-vous donner le code que vous utilisez réduire le CollapsiblePanelExtenders? – ChessWhiz

+0

Que faites-vous avec la sortie de ce fichier? L'utilisateur le télécharge-t-il? –

+0

Quel type de contenu se trouve dans le fichier généré dynamiquement? Pourriez-vous créer un contrôle côté serveur et afficher son contenu au lieu d'utiliser Response.Write? –

Répondre

3

Voici un exemple de conception rapide de la façon dont vous pouvez mettre à jour le texte sur l'écran et télécharger un fichier en même temps par un postback AJAX avec un UpdatePanel.

Code ASPX:

<asp:UpdatePanel id="update1" runat="server"> 
    <ContentTemplate> 
    <asp:TextBox id="textbox1" runat="server" /><br /> 
    <asp:Button id="button1" onclick="button1_Click" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

code C#:

private string GenerateDownloadLink(string fileContent, string fileName) { 
    // worker process will need write access to this folder 
    string downloadFolder = "./download"; 

    TextWriter file = new StreamWriter(Server.MapPath(downloadFolder) + @"\" + fileName); 
    file.WriteLine(fileContent); 
    file.Close(); 

    return downloadFolder + "/" + fileName; 
} 

private void button1_Click(object sender, EventArgs e) { 
    textbox1.Text = "the file download will begin shortly..."; 

    string fileContent = "here is the content for a new dynamically generated file"; 

    string fileUrl = GenerateDownloadLink(fileContent, "hello.txt"); 

    ScriptManager.RegisterStartupScript(this, this.GetType(), "StartDownload", "window.location = '" + fileUrl + "';", true); 
} 

Vérifiez également ce MSDN example.

Je voudrais également ajouter que UpdatePanels mangeront votre âme et vous devriez se débarrasser d'eux en faveur de quelque chose comme appeler un WebMethod via AJAX, si possible :)

+0

Cela ne fonctionnera pas car j'ai besoin de générer le fichier lorsque le bouton est cliqué en fonction des valeurs dans les différents champs de la page. Je ne peux pas simplement les rediriger vers le fichier via javascript car il n'existe pas avant que le bouton ne soit cliqué. – Ben

+0

@Ben: Générez le fichier dans 'button1_Click' en fonction des champs de la page, enregistrez ce qui serait l'URL du fichier, puis utilisez le dans ScriptManager.RegisterStartupScript'. –

+0

@Nate: Pourriez-vous donner un exemple de comment faire cela? J'écris actuellement le fichier de la mémoire et il n'a pas d'URL. – Ben

Questions connexes