2008-10-22 53 views
9

是否有可能使用ASP模板引擎(含部分代碼隱藏類,動態<%...%>塊,這樣的)產生非HTML?我想要一個乾淨而可維護的方式來動態生成代碼。 (具體而言,我想要生成填充了從數據庫中值LaTeX的代碼。)使用ASPX渲染引擎來生成非HTML

目前我的LaTeX模板是與我同數據庫值的佔位符與string.replace資源字符串。這個解決方案很快就變得很難維護和清潔。我真的很喜歡使用aspx標記中的動態塊,但我不確定a)當輸出不是HTML時,aspx是否會拋出適當的值,或者b)如何實際將結果呈現爲.tex文件。

生成代碼本身位於C#.dll中。我們使用.NET 3.5

這可能嗎?提前致謝。

回答

7

隨Visual Studio 2008的本機或與Visual Studio 2005 SDK中的T4模板,你幾乎可以生成你想要的任何東西。

你可以有以下鏈接的詳細信息:

我很確定所有這些鏈接對y而言都是一個好的開始我們的追求。

如果你想生成的Visual Studio之外T4模板,還有自定義MSBuild任務調用T4模板(link

這裏的MSBuild任務的「執行」的代碼示例。 Click here for the source code

public override bool Execute() 
{ 
    bool success = false; 

    //read in the template: 
    string template = File.ReadAllText(this.TemplatePath); 

    //replace tags with property and item group values: 
    ProjectHelper helper = new ProjectHelper(this); 
    template = helper.ResolveProjectItems(template); 

    //copy the template to a temp file: 
    this._tempFilePath = Path.GetTempFileName(); 
    File.WriteAllText(this._tempFilePath, template); 

    //shell out to the exe: 
    ProcessHelper.Run(this, TextTransform.ToolPath, TextTransform.ExeName, string.Format(TextTransform.ArgumentFormat, this.OutputPath, this._tempFilePath)); 
    success = true; 

    return success; 
} 
+0

從我的理解來看,T4是設計時代的產物。我需要在運行時生成乳膠,類似於asp。如果T4可以在運行時調用,它看起來像是正確的工具,但我不確定它可以。 – Wyatt 2008-10-22 19:33:25

0

我不明白爲什麼不。我在前一份工作中認識的人使用ASP.NET頁面創建了一個數據庫包裝生成器,並使用中繼器控件來插入屬性。然後他將文檔內容寫入源文件。

如果你擔心ASP.NET會大發脾氣,你可以創建一個非常有限的測試案例,看看自己。不應該花很多時間來測試一個理論,並讓你知道它是否符合你的需求。

0

這當然有可能。大多數服務器控件都會自動發出HTML標記。但是,您可以數據綁定頁面並使用數據綁定表達式。 Visual Studio無疑會抱怨無效的標記。

然後,您必須通過運行卡西尼或ASP.NET管道您的網頁獲取輸出。我有一個單元測試工具可以做到這一點,而且這非常簡單。

A 更好想法,但可能會使用代碼生成器。像CodeSmith之類的應該可以很好地工作,甚至可以使用內置於T4中的Visual Studio爲您提供很大的靈活性,同時不會試圖將您綁定到HTML。

+0

但是T4模板可以在運行時渲染嗎? – Wyatt 2008-10-22 19:35:19

0

當然可以。只需創建一個標準的.aspx頁面,刪除所有的HTML並在頁面中放置任何您想要的內容。然後,您可以使用< %%>標籤在頁面中放置動態內容。就像Jason Z所說的那樣,你可以使用Repeater控制器遍歷項目集合以列出「頁面」。此外,由於它們會生成HTML,因此您無法使用所有其他服務器控件,但您仍然可以根據需要創建自己的服務器控件和/或用戶控件。