.NET中的模板引擎技術——StringTemplate(st(or HTML)模板+ASP.NET頁面作為模板)

來源:互聯網
上載者:User

 其實這個標題命名的有點大,但是主題明確:就是使用StringTemplate模板引擎,採用HTML頁面和ASP.NET頁面(可以使用ASP.NET控制項)作為模板,實現*****(這個實現什麼就不用說了吧,這裡省略200字。)

 

 

1. 模板技術的原理:

 

就是能夠自動替換預留位置的替換引擎。原理上也就是兩個步驟,找到—>替換。但是替換不是簡單的替換,包括:

 

簡單變數替換();
複雜變數替換();
物件變數替換();
索引值類型替換();
自訂集合替換();
同時顯示多個變數();
模板調用();
給調用模板傳參數();
值模板();
簡單迴圈();
交差迴圈顯示();
通過模板交差迴圈();
條件判斷();
從檔案中建立模板();

 

StringTemplate基本上就是按照這種模式來設計的。

 

 

2. 技術實現

 

2.1 首先是在HTML模板檔案中:

 

姓名:$User.Name$ 年齡:$User.Value$

 

在對應的cs字碼頁面中:

 

User us = new User();<br />us.Name = "xxsssx";<br />us.Value ="80";<br />StringTemplate st = new StringTemplate("$User.Name$,$User.Value$");<br />st.SetAttribute("User", us);<br />Console.WriteLine(st.ToString());

 

 

2.2 與ASP.NET頁面比較

 

aspx頁面:

 

 <asp:Label id="Name" runat="Server" /><asp:Label id="Mail" runat="Server" />

aspx.cs檔案:

 
User us = new User();<br />us.Name = "xxsssx";<br />us.Value ="80";<br />Name.Text=us.Name;<br />Mail.Text=us.Value

 

 

在StringTemplate中,我們知道StringTemplate可以完成很多工作,實際的功能已經很強大了,包括比如條件判斷、迴圈遍曆...我們只需要在後端字碼頁面進行資料填充就可以了,但是對於複雜的商務邏輯呢?比如可以判斷,可以迴圈,可以分支,可以使用現成的控制項,對於複雜的功能,我們是不是很期望能夠使用到ASP.NET本身內建的強大的控制項呢?ok,恭喜你,你的想法將會得到實現!!哈哈!~

 

 

在開始之前,我們介紹一下使用ASP.NET模板與StringTemplate方法的對比:

 

                           aspx模板         StringTemplate
asp.net控制項           支援                     不支援
複雜顯示邏輯           支援                     支援(未經測試所有可能性)
編輯器支援              支援                     不支援
編譯檢測                 支援                     不支援

 

 

OMG!!用ASP.NET作為模板的話功能真是好強大啊!!但是。。。。關鍵的問題是。。怎麼利用aspx的頁面作為模板來被調用呢??

 

其實解決的方法很簡單,只需要Server.Execute()就可以將執行的aspx頁面啟動並執行結果以一個TextWriter返回。

 

Server 是 ASP 中的一個內建對象,它有一個方法為 Execute,用法是:

 

Server.Execute(path)

微軟認為它的閃光點是:可以將複雜的頁面劃分為多個模組,然後用 Server.Execute 將這些模組集中在一個頁面顯示。

 

例子:

 

頁面First.aspx:

 

<%<br />string str = "this is first page! ";<br />Response.Write(str + "started...");<br />Server.Execute("SecondPage.aspx");<br />Response.Write(str + "End...");<br />%>

 

頁面SecondPage.aspx:

 

<%<br />string str = "this is the second page! "<br />Response.Write(str);<br />%>

 

執行First.aspx:顯示的結果為:

 

this is first page! starting...this is the second page! this is the first page! End...

 

看了這個結果是不是已經恍然大悟了??呵呵呵。。。

但是。。。別高興得太早了。。。因為我們在st或者html的模板頁面中,是要進行頁面配置的,如果處理不好的話就會影響到頁面的布局和樣式,因為Server.Execute是無傳回值的呀!!那怎麼處理這個問題呢?oh!~~

 

其實解決辦法很簡單。。如下:

 

TextWriter tw = new StringWriter();<br />HttpContext.Current.Server.Execute("SpecialTopicsDetail.aspx", tw);</p><p>string result = tw.ToString(); //做你想做的事情。。

 

是簡單吧?呵呵呵~

 

如果想利用使用者控制項完成的話也是可以的喲,具體方法請參考這裡:

 

Render User Control as String Template :

http://aspadvice.com/blogs/ssmith/archive/2007/10/19/Render-User-Control-as-String-Template.aspx

 

 

另外,在Server.Execute中,調用和被調用的檔案之間共用的內容有:

> Application 變數
> Session 變數
> Server 變數和屬性
> Request 集合和屬性,包括 Form、QueryString 資料。
> Response 集合和屬性,被調用的檔案可以更改 HTTP 頭資訊。但是同樣要求還沒有用 Response.Flush 向用戶端發送有資訊。
> Server.Execute 也可以形成遞迴,但遞迴達到一定的次數後不會像 Server.Transfer 一樣自動終止,而是報錯並終止。

 

ok,這裡只講了關鍵點的原理和實現,實際上基礎的東西都沒介紹,我想那些基礎的東西對於大家來說早就精通了。。。

本文中引用了不少作者的成果,在這裡也感謝他們的共用和付出,謝謝!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文參考網址:

http://blog.csdn.net/ming_chang/archive/2009/06/01/4234426.aspx

http://aspadvice.com/blogs/ssmith/archive/2007/10/19/Render-User-Control-as-String-Template.aspx

http://www.cftea.com/c/2006/09/KMA6IL9SD8Y9P6GZ.asp

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.