webForumDet fria alternativet

Resultatet av en rendrerad sida som text

.NET

1 svar · 237 visningar · startad av Jon

Medlem sedan juli 20011 304 inlägg
Frågan#1

Jag skulle vilja ha ut resultatet av en rendrerad sida som vanlig text för att spara ner i en databas, dvs göra en ögonblicksbild av sidan.

Jag har experimenterat lite och gjort en funktion som sparar ner den till fil. Problemet är att man sedan måste redirecta den sidan annars smäller det.

Det bästa vore om man kunde ha en helt fristående funktionman kunde ropa på och skicka med en sida som skulle köras utan att visas för klienten och sen returnera resultatet som en sträng.

Någon som har någon bra idé om hur detta skulle kunna genomföras?

koden för att spara sidan ser ut ungefär såhär:

protected void SavePageToHTML(string outputFilename, string redirect)
		{
			StringBuilder renderedOutput = null;
			StringWriter strWriter = null;
			HtmlTextWriter tWriter = null;
			FileStream outputStream = null;
			StreamWriter sWriter = null;
			String filename = null;

			try
			{
				renderedOutput = new StringBuilder( );
				strWriter = new StringWriter(renderedOutput);
				tWriter = new HtmlTextWriter(strWriter);
				Page.RenderControl(tWriter);
				filename = Server.MapPath(".") + "\\" + outputFilename;
				outputStream = new FileStream(filename,	FileMode.Create);
				sWriter = new StreamWriter(outputStream);
				sWriter.Write(renderedOutput.ToString( ));
				sWriter.Flush( );
				
				Response.Redirect(redirect);
			}

			finally
			{
				if (outputStream != null)
				{
					outputStream.Close( );
				}

				if (tWriter != null)
				{
					tWriter.Close( );
				}

				if (strWriter != null) 
				{
					strWriter.Close( );
				}
			}

		}

För att vara lite mer konkret i frågan:
Det vore ju inga konstigheter att returnera renderedOutput men hur göra detta från en klass som tar emot sidnamnet att renderara?

Medlem sedan juli 20011 304 inlägg
#2

Haha!

Man är ju bra trött i nattmössan efter all fet julmat.

TextWriter textWriter = new StringWriter();
Server.Execute("sida.aspx?id=1", textWriter);
string s = textWriter.ToString();

Räcker alldeles utmärkt.
Nåja den andra koden är väl bra att ha nån gång kanske.

Ett tips om någon vill göra detta är att parsa bort viewstate och forms, det blir lite snyggare så...

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)