2010-04-07 4 views
1

J'ai une importation de csv qui importe mes valeurs CSV dans Sitecore. Après ce processus, je veux montrer les erreurs dans un asp: littéral. Cela ne fonctionne pas, et je pense que c'est parce que j'ai besoin d'un updatepanel pour cela afin de pouvoir mettre à jour le texte après le premier postback (le chargement/importation csv).Affichage des erreurs dans updatepanel après le traitement d'un fichier CSV

Je l'ai fait:

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
       </asp:ScriptManager> 
       <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
        <ContentTemplate> 
         <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 
         <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 
        </ContentTemplate> 
       </asp:UpdatePanel> 

et code ceci:

string melding = string.Format("Er zijn {0} objecten geïmporteerd.{1}", nrOfItemsImported, errors); 

ViewState["Melding"] = melding; 

Et j'ai un bouton. Sur le onclick de ce bouton je:

 Literal literal = new Literal(); 
     literal.Text = (string)ViewState["Melding"]; 
     literal.ID = DateTime.Now.Ticks.ToString(); 

     UpdatePanel1.ContentTemplateContainer.Controls.Add(literal); 
     PlaceHolder1.Controls.Add(literal); 

Quand j'appuyez maintenant sur le bouton je veux mettre à jour le panneau afin qu'il montrera mon littérales avec le errormsg sur elle. Ceci cependant ne se produit pas. Comment se peut-il? Je devine qu'il a quelque chose à voir avec mon état d'affichage, je ne vois pas les clés sur le viewstate après que j'appuie sur le bouton ...


@Update:

Je trouve le problème. Je stockais des informations dans une session, mais les données de la clé dans laquelle je stockais les informations étaient trop volumineuses. Cela a rendu la clé de session vide. Je signalais une chaîne vide dans mon littéral et donc aucune information n'a été montrée. Je suis maintenant à la recherche d'un meilleur moyen de stocker mes données et de les afficher dans mon updatepanel. J'ai essayé Viewstate/Session/Cookies et rien de tout cela ne marcherait comme je le voulais. Lorsque j'utilise un viewstate, je ne peux pas stocker d'informations. Le viewstate (debugmode) montre les touches 0 et 0 ... J'espère que quelqu'un connait un bon moyen de m'assurer que ma chaîne d'erreurs (476kb) est stockée quelque part où je peux facilement la poster sur le littéral de mon updatepanel.

+2

Je supprimer cette partie: 'literal.ID = DateTime.Now.Ticks.ToString()' et juste utiliser 'literal.ID =" Status "', pas sûr si ASP.Net reconnaît que pourrait être un ID invalide , mais cela pourrait être le cas. –

+0

Avez-vous essayé de le déboguer? Est-ce que votre code atteint l'événement Button1_Click? – Prutswonder

Répondre

1

Si vous utilisez un contrôle FileUpload, vous ne pouvez pas utiliser le UpdatePanel pour mettre à jour le panneau de façon asynchrone. Le téléchargement de fichier est un événement synchrone. Vous devez donc mettre à jour le contrôle Literal sur la page une fois le téléchargement terminé lors de l'événement Page_Load suivant.

0

Dans votre code, avez-vous essayé UpdatePanel1.Update();? Même si vous avez ajouté un contrôle, vous devrez toujours "déclencher" la mise à jour vers le panneau de mise à jour.

Voir ici pour une éventuelle question similaire: StackOverflow

+0

J'utilise la méthode .update oui. Merci pour la réponse tho. Je pense que ça a un rapport avec le viewstate. Dans la méthode de clic sur le bouton lors du débogage, je ne vois aucune touche dans le viewstate ... – Younes

+0

Avez-vous le ViewState activé? EnableViewState = "True" doit être défini sur la page. – Tommy

0

J'ai essayé ce code et clic de bouton, je suis en mesure d'obtenir le texte littéral de la page Web. Pouvez-vous fournir avec plus de détails.

+0

Et encore une fois. Je pense que c'est mon point de vue qui ne fonctionne pas correctement. Je peux aussi obtenir un Lit sur ma page avec du texte statique. Je veux cependant stocker quelque chose (texte) dans le viewstate de cette page et ensuite le transférer à mon panneau d'erreur. Et je vois mon viewstate n'est pas rempli avec des informations ... – Younes

+0

@Tommy, Younes - UpdatePanel1.Update() ne devrait pas être appelé.Comme n'importe quel événement de publication déclenché dans le UpdatePanel conduira à AsyncPostback de UpdatePanel, qui mettra à jour le panneau quand même. –

+0

Ainsi, le UpdatePanel fonctionne bien et vous devez déboguer le code Viewstate maintenant. –

Questions connexes