2011-02-17 4 views
0

Je convertis un ancien script d'ASP en ASP.NET et voudrais un conseil. Le script ASP d'origine utilisait Response.Write pour afficher des informations sur ce qui s'était passé pendant l'exécution. J'ai réécrit le tout dans ASP.NET mais c'est nouveau pour moi en tant que programmeur C old school. Les exigences du travail incluent l'utilisation de la saveur VB de ASP.NET, btw.Comment afficher les résultats en couleur sur une page Web? (Response.Write alternative?)

À l'origine, j'ai mis en place un TextBox et édité la propriété text pour vider mon rapport final. Maintenant, ils veulent des couleurs différentes pour une importance de message différente et je trouve que le TextBox peut seulement faire une couleur pour toutes les lignes. Je suis revenu à l'ancienne réserve RW, mais j'ai reçu un message disant que ce n'est pas déclaré et qu'en regardant autour, je vois que c'est un problème parce que je l'appelle du code derrière et qu'il est hors de portée des éléments HTML de la page elle-même.

Ma question est quelle est la meilleure façon de produire des informations sur la page Web avec différentes lignes étant des couleurs différentes du code-behind d'une page?

Question secondaire - si j'ai mal compris quelque chose, n'hésitez pas à corriger ma réflexion. :)

Merci!

Répondre

3

Littéral est l'approche correcte à mon avis aussi, pour éviter les désordres, vous pouvez envelopper bien avec certaines fonctions.

D'abord, un contrôle littéral ont qui sera les messages espace réservé:

<asp:Literal id="litMessages" runat="server" /> 

En second lieu, utiliser les CSS pour les couleurs, il est plus élégant et flexible ..par exemple:

<style type="text/css"> 
.msg_information { color: blue; } 
.msg_error { color: red; } 
.msg_warning { color: purple; } 
</style> 

maintenant ont cette fonction:

void AddMessage(string message, string type) 
{ 
    string strHTML = string.Format("<div class=\"msg_{0}\">{1}</div>", type, message); 
    litMessages.Text += strHTML; 
} 

Et enfin ajouter un message ont un tel code n'importe où dans votre code:

AddMessage("method started successfully", "information"); 
AddMessage("Failed to do this: " + someErrorMessage, "error"); 
AddMessage("Value is empty", "warning"); 

Vous pouvez le rendre encore plus élégant par en utilisant enum pour le type de message et plus, mais ce qui précède est suffisant pour les besoins de base. :)

En ayant chaque message dans son propre <div> vous le faites être dans sa propre ligne automatiquement et vous pouvez contrôler chaque message plus facilement avec CSS. Éditer: mon code est C# mais peut aussi être facilement converti en VB.NET.

+1

J'aime votre approche, je suggère qu'ils utilisent une liste, et mettre les messages en li pour le rendre plus sémantique. – Loktar

+0

@Lok bonne suggestion! :) –

+0

Merci pour votre aide! C'est vraiment ce dont j'avais besoin. Pour répondre aux autres questions, je n'ai pas utilisé Literal parce que je suis novice et que je ne connais pas autant le monde .Net que je le devrais. – Deverill

1

Pourquoi ne pas simplement entourer votre Response.Write d'une plage avec un attribut de couleur basé sur ce que vous produisez? par exemple.

Response.Write(String.Format(@"<span style=""color: #{0}"">{1}</span>", System.Drawing.ColorTranslator.ToHtml(Color.Red),yourMessage)) 

Pour le rendre plus simple, vous pouvez faire quelque chose comme ceci:

private void ReponseWriteEx(string output, Color color) 
{ 
    Response.Write(String.Format(@"<span style=""color: #{0}"">{1}</span>", System.Drawing.ColorTranslator.ToHtml(color),output)) 
} 

Et puis l'appeler, par exemple ResponseWriteEx("Hello World!",Color.Blue);

+0

Il essaye d'éviter d'utiliser Response.Write c'est tout le point. :) –

+0

@Shadow Je le vois demander, quelle est la meilleure façon - mais rien ne dit qu'il voulait éviter d'utiliser Response.Write. Je comprends la question car il veut produire des informations de débogage w/différentes couleurs représentant différents messages. Je pourrais être loin de la base si! :) –

+0

'Response.Write' était la seule façon de sortir des choses dans ASP classique, en lisant la question, il semble qu'il a migré vers .NET et en essayant d'assigner le texte de contrôle côté serveur à la place, ce qui est la bonne approche. :) –

0

@Deverill,

Pourriez-vous utiliser une vue de la grille et chaque ligne est un message? De cette façon, vous pouvez appliquer des couleurs à la vue de la grille.

0

Je ne sais pas pourquoi vous utilisiez une zone de texte et non une étiquette.
Lorsque vous utilisiez Response.Write, je suppose que vous n'avez pas besoin de l'intervention de l'utilisateur. votre meilleur pari ici est le contrôle littéral.
LiteralControl Class Contrairement à une étiquette (ou une zone de texte), elle peut contenir n'importe quel code HTML. Cela vous permettra de placer des travées avec des classes autour de n'importe quel texte dont vous avez besoin. Vous devrez peut-être mettre des options sur le littéral pour permettre html

Questions connexes