2009-09-11 5 views
1

J'ai fait un peu de ASP.NET au cours de la dernière année, mais je ne suis jamais tombé sur ce défi: je construis un site web qui est assez simple, principalement basé sur HTML et Javascript. Cependant, sur une page, j'ai besoin de lire un fichier XML sur le serveur, l'analyser, créer du HTML à partir des valeurs contenues dans le fichier XML, et l'afficher comme réponse. Je vais utiliser ASP.NET avec C# pour cela. Je comprends comment analyser le XML et générer le code HTML en C#, mais comment écrire le code HTML dans la réponse/dans la page? Le HTML dynamique généré est seulement dans une grande div dans la page, et le reste de la page est statique. Quelle est la meilleure façon de procéder? Comme je n'ai jamais rien fait de pareil auparavant, je suppose qu'une façon de le faire serait d'effacer toute la source HTML de la page et d'utiliser Response.Write() dans l'événement Page_Load pour écrire tout le HTML de la page, avec les valeurs XML déjà insérées. Est-ce la bonne méthode, et si oui, pourriez-vous me donner quelques lignes de code comme exemple pour m'assurer que je le fais bien? Merci!ASP.NET: générer dynamiquement du HTML, comment?

Aussi, comme je n'ai jamais eu l'occasion de le faire auparavant, quelle est la meilleure façon de lire un fichier dans ASP.NET C# qui se trouve sur votre serveur?

MISE À JOUR: Merci pour toutes les réponses! J'ai trouvé la solution à mon problème, et pourtant les trois réponses fournies sont de bons moyens pour relever ce défi. Comme vous pouvez le deviner, c'est un choix difficile à qui donner la réponse acceptée, mais je vais le donner à this answer, par crainte, parce qu'il a clairement mis beaucoup d'efforts dedans, c'est une solution assez élégante, et il répondu à mes deux questions. Merci à tous pour les merveilleuses réponses!

+0

S'il vous plaît faire de votre deuxième problème une nouvelle question ... – Mac

+0

Il a déjà été répondu ici, même si cela aurait été une bonne idée, car il est difficile de sélectionner la "réponse acceptée", comme je l'ai utilisé l'une des méthodes et l'explication était dans un autre. Merci tout le monde! –

Répondre

7

Créer une div qui est accessible dans le code du serveur:

<div runat="server" id="xmlGeneratedContent"></div> 

En Page_Load:

xmlGeneratedContent.InnerHtml = parcedHtmlFromXml; 

EDIT:
En réponse à la dernière question: comment lire un fichier sur le serveur ...
Si le fichier se trouve sous le site Web, vous pouvez utiliser Server.MapPath pour obtenir l'emplacement du disque physique à partir du url relative:

string filename = Server.MapPath("files/file.txt"); 

Comment lire dépend de quel type de fichier, il est, et comment vous voulez le lire.Si vous voulez lire comme texte brut, voici quelques méthodes:

lire tous à la fois:

string content = System.IO.File.ReadAllText(filename); 

Lire à la fois dans un tableau de chaîne contenant les lignes:

string[] content = System.IO.File.ReadAllLines(filename); 

Lire une ligne à la fois:

System.IO.StreamReader sr = new System.IO.StreamReader(filename); 
while (!sr.EndOfStream) 
{ 
    string line = sr.ReadLine(); // or other method reading a block 
    //Do something whith the line 
} 
sr.Close(); 
sr.Dispose(); 
+1

Je préfère cela car il est beaucoup plus propre. – Dykam

+0

J'ai mis à jour le PO pour expliquer pourquoi j'ai marqué ceci comme réponse acceptée. Merci! –

+0

Je pense que vous voudrez peut-être vérifier le cycle de vie asp.net pour vous assurer que vous ne vous trompez pas. Si vous utilisez post et ne pas obtenir je pense que vous pourriez vouloir faire ce qui précède dans page_init ... – zzzuperfly

5

En fonction codebehind:

public string getHML() 
{ 
return "htmltext"; 
} 

sur la page:

<div><%=getHML()%></div> 
+0

Donc, getHML() sera appelée lors du chargement de la page? Cool! Va l'essayer! –

+0

J'aime vraiment l'élégance de cette méthode, car je n'ai jamais su que vous pouviez intégrer du code côté serveur en HTML comme ça. Merci beaucoup! J'utilise ça! –

2

Eh bien, votre suggestion serait certainement travailler. Effacer tous les fichiers HTML dans la page ASPX, et dans l'événement Page_Load que vous allez faire ceci:

Response.Write(System.IO.File.ReadAllText(yourFilePath)); 

Je ne pense pas qu'il y ait beaucoup plus à lui.

+0

Merci pour votre réponse. –

+0

De rien. :) –

3

Juste pour ajouter à la diversité: Ma solution préférée est d'utiliser

<asp:Literal runat="server" ID="myLiteral" /> 

Et puis dans le code:

this.MyLiteral.Text = "Generated HTML goes here"; 

L'avantage sur une <div> est que cela ne génère aucun HTML supplémentaire - si vous pouvez le mettre où vous voulez et générer ce que vous voulez.

Souvent, j'ai également mis EnableViewState="false" dessus, si je peux facilement régénérer le contenu à chaque demande. Cela réduit la taille de ViewState, car le myLiteral.Text est également enregistré dans ViewState.

+0

Je vous +1 pour avoir mentionné viewstate, mais ne peut pas être dérangé d'enregistrement;) – wefwfwefwe

Questions connexes