2009-05-26 13 views
5

Il mio amico utilizza Visual Studio per sviluppare siti Web in ASP.NET. Usa solo la struttura della Pagina Master, a parte il fatto che è al 100% normale HTML e CSS.È possibile esportare pagine html generate dal sito Web ASP.NET tramite Visual Studio?

Esiste un modo per esportare il sito Web in pagine HTML in base alle rispettive pagine principali?

In caso contrario, carica manualmente ciascuna pagina e salva l'HTML, oppure scrivo una piccola app che lo fa.

In alternativa, qualcuno sa di uno strumento per ottenere qualcosa di simile?

+0

Una domanda molto interessante! – User

+0

Sono felice che tu abbia modificato il titolo. Ho pensato che "avrei dovuto mettere" nelle pagine HTML "subito dopo aver postato :) – joshcomley

+0

Ho chiarito il titolo per te. – Soviut

risposta

1

Visual Studio non ha questa capacità fuori dalla scatola. Tuttavia, dovrebbe essere possibile scrivere uno strumento che attraversi una mappa del sito, acquisisca l'html renderizzato dall'oggetto risposta e quindi lo scriva in un file.

+0

Questo era esattamente quello che avevo in mente come "ultima risorsa"! – joshcomley

1

Non so davvero come esportare un intero sito su una copia locale.

Ci sono tuttavia strumenti - downloader sito Web. So di uno - TeleportPro, ci dovrebbero essere altri. Controllali se ti sembra un'opzione.

1

Si potrebbe dare a Macromedia Dreamweaver una possibilità se si ha voglia di sperimentare. Si occupa dello sviluppo della pagina lato client e lato server.

+0

+1 Ho usato il sistema di template di Dreamweaver su progetti in cui il client non aveva back-end dinamico. Essenzialmente è il sistema di masterpage in ASP.NET ma dreamweaver genera le pagine per te. – Soviut

1

Quando si utilizza MasterPages, il contenuto di MasterPage viene unito alla pagina di contenuto sul lato server (alla pre-compilazione o alla prima richiesta della pagina). Quindi è necessario avere le pagine di contenuto e MasterPage compilare tramite aspnet_compile ad un certo punto. Vedere la sezione "Comportamento di runtime" di this MSDN article.

Il tuo amico potrebbe voler utilizzare lato server vecchio stile include (che è essenzialmente ciò che un MasterPage sta facendo per voi in ogni caso):

<!--#include virtual="/includes/header.html" --> 
<!--#include virtual="/includes/nav.html" --> 

<p> content </p> 

<!--#include virtual="includes/footer.html" --> 

Se questo è bloccato dal vostro web server/host di scelta (un po ' disabilitarlo per motivi di sicurezza) quindi creerò una pagina indice principale e useremo una chiamata Ajax per riempire un contenuto DIV. Ovviamente, se Javascript è disabilitato, i tuoi visitatori non vedranno alcun contenuto.

1

Penso che avrai bisogno di tirare il tuo per questo. Questa funzione visita un URL e ottiene il contenuto: esistono

Public Shared Function GetHTTPContent(ByVal url As String) As String 
    Dim req As WebRequest = System.Net.HttpWebRequest.Create(url) 
    Dim encode As System.Text.Encoding = System.Text.Encoding.GetEncoding("utf-8") 
    Dim sr As New StreamReader(req.GetResponse().GetResponseStream(), encode) 
    Dim HTTPContent As String = sr.ReadToEnd 

    sr.Close() 
    sr.Dispose() 

    Return HTTPContent 

End Function 
0

Ecco la mia soluzione rapida che esegue la scansione del sito Web locale per i file .aspx e genera file .html accanto a html.

protected void ButtonGenerate_Click(object sender, EventArgs e) 
{ 
    RecursivelyGenerateHtmlFiles(Server.MapPath("~/"), new DirectoryInfo(Server.MapPath("~/"))); 
} 

private void RecursivelyGenerateHtmlFiles(string root, DirectoryInfo folder) 
{ 
    foreach (var aspxPage in folder.GetFiles("*.aspx")) 
    { 
     var destination = aspxPage.FullName.Substring(0, aspxPage.FullName.Length - 4) + "html"; 

     if (File.Exists(destination)) 
      File.Delete(destination); 

     var url = "http://" + Request.Url.Authority + "/" + aspxPage.FullName.Replace(root, ""); 
     var request = HttpWebRequest.Create(url); 

     File.WriteAllText(destination, new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd()); 
    } 

    foreach (var subDirectory in folder.GetDirectories()) 
    { 
     RecursivelyGenerateHtmlFiles(root, subDirectory); 
    } 
} 

Ha funzionato per me.

Inoltre, è possibile modificare un file .bat per generare una cartella con tutti i file .html dal proprio sito. Questo è utile quando si crea una copia piatta creativa.

set folder="Generated" 
cd /d %folder% 
for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q) 
cd /d .. 
xcopy /r /d /i /s /y /exclude:exclude.txt PAHtml Generated 

Ecco l'esclusione.file txt da utilizzare

.dll 
.cs\ 
.aspx 
.pdb 
.csproj 
.user 
.vspscc 
.config 
Problemi correlati