2015-11-24 20 views
0

我從c#應用程序生成動態HTML,通過使用字符串生成器html標記被追加並最終形成完整的html。在所有的stringbuilder我用c#對象替換html佔位符。在c#中創建動態html的最好方法#

建設的html是複雜的,我需要從c#屬性填充佔位符,有時數據庫調用。沒有XML,因此不使用XSLT。因爲我的html文件需要大量的字符串buider。大部分章節都是基於業務邏輯重複的。

現在一切正常,我想從stringbuilder中移走hardedcoded html字符串,因爲maintenence以後會很難。從控制檯應用程序中擺脫硬編碼html的任何最佳建議。

在性能方面,它的好處是使用大量的字符串生成器的(ATLEAST 500的StringBuilder正在使用) 例如,我的HTML拆分爲如下

  1. 頭部分
  2. 主體部分
    2.1 SECTION1
    2.1.1節1.1
    2.1.2節1.2
    2.1.3節1.3
    2.2第2節
    2.3 SECTION3
    2.4 section4
    2.5 section5
    3.Footer部分
  3. Temrs和條件

我剛纔提供的幾行代碼在這裏,供大家參考。

代碼示例:

htmlStringBuilder.Append("<table class=\"paddingIndendation\" style=\"width: 100%;\" border=\"1\">"); 
    htmlStringBuilder.Append(string.Format("<tr><td>Location {0}</td><td>:</td><td>{1}</td></tr>", location.LocationNumber, location.AddressLine1)); 
    htmlStringBuilder.Append(string.Format("<tr><td colspan=\"2\" style=\"text-align:right;\"></td><td>{0}</td></tr>", location.AddressLine2)); 
    htmlStringBuilder.Append(string.Format("<tr><td colspan=\"2\" style=\"text-align:right;\"></td><td>{0} {1}</td></tr>", location.PostalCode, location.City)); 
htmlStringBuilder.Append(string.Format("<tr><td colspan=\"2\" style=\"text-align:right;\"></td><td>{0} {1}</td></tr>", this.Id,this.StartEffectiveDate)); 

我想移動hardcorded HTML內容的地方(可能是到文件或資源文件),並具有屬性替換佔位符。任何人都可以建議最好的方式來做到這一點。

+1

爲什麼不長時間創建頁面會節省很多頭疼和維護噩夢..你可以在'.aspx'標記中保留很多你正在做的事情。 – MethodMan

+0

正在生成的html用於創建PDF文檔。從長遠來看創建頁面意味着什麼?我不清楚這一點。你能解釋一下嗎? – Govind

回答

5

如果你看一下Maintainence何衛青你其實可以做一個HTML文件佔位符這樣

<table class="paddingIndendation" style="width: 100%;" border="1"> 
    <tr> 
     <td>Location ~LocationNumber~</td> 
     <td>:</td> 
     <td>~AddressLine1~</td> 
    </tr> 
    <tr> 
     <td colspan="2" style="text-align:right;"></td> 
     <td>~AddressLine2~</td> 
    </tr> 
    <tr> 
     <td colspan="2" style="text-align:right;"></td> 
     <td>~PostalCode~ ~City~</td> 
    </tr> 

負載在一個字符串變量中的字符串如

string htmlstring = File.ReadAllText("yourhtml.txt"); 

然後或許你可以創建一個小函數,您可以用這種屬性或數據庫調用替換所有這些佔位符

htmlstring = htmlstring.Replace("~LocationNumber~",location.LocationNumber); 
htmlstring = htmlstring.Replace("~AddressLine1~",location.AddressLine1); 
htmlstring = htmlstring.Replace("~AddressLine2~",location.AddressLine2);  
htmlstring = htmlstring.Replace("~PostalCode~",location.PostalCode); 
htmlstring = htmlstring.Replace("~City~",location.City); 
2

我不確定爲什麼這個問題會被降低。

評論者是對的;你在做這件事情時會遇到很多麻煩,無論它的表現是否良好。所以StringBuilder真的是錯誤的路要走。如果你打算這樣做,那麼它是否表現良好並不重要。你會換掉更好的方法來做到這一點,而不是讓它保持簡單,以便維護。無論表現如何,表現都會是什麼。

我會做什麼,如果我是你,它仍然是很多工作,將創建一個本地,私人網站,使用ASP.NET(如果你想要MVC),然後使用腳本檢索或者抓住你的網站,拉下你想要的所有生成的HTML。

+0

正在生成的html用於通過使用外部PDF創建PDF – Govind

+0

好吧。我不認爲我的答案取決於你使用的是什麼。我的假設是,你正在按照你的方式組裝HTML,因爲有些*的HTML必須被動態地插入到相當靜態的HTML的* most *中。這正是ASP.NET所做的,並且具有驚人的支持--StringBuilder不支持。只是,爲了獲得最終的HTML,您必須發出基於Web的請求。 PowerShell 3及更高版本有一個非常簡單的'Invoke-WebRequest'命令;還有其他簡單的方法。 –