什麼是模板引擎?說白了就是能夠自動替換佔位符的替換引擎。原理上也就是兩個步驟,找到-》替換。但是替換不是簡單的替換,包括:
簡單變量替換();
複雜變量替換();
對象變量替換();
鍵值類型替換();
自定義集合替換();
同時顯示多個變量();
模板調用();
給調用模板傳參數();
值模板();
簡單循環();
交差循環顯示();
通過模板交差循環();
條件判斷();
從文件中創建模板();
常用的模板引擎,StringTemplate和velocity差不多都是按照這種模式來設計的。但是這樣子真的就是我們需要的嗎?我們拿一段典型的StringTemplate的模板代碼來看看:
首先是在模板文件中:
姓名:$User.Name$ 年齡:$User.Value$
然後是在代碼裏: User us = new User();
us.Name = "xxsssx";
us.Value ="80";
StringTemplate st = new StringTemplate("$User.Name$,$User.Value$");
st.SetAttribute("User", us);
Console.WriteLine(st.ToString());
那麼我們來和ASP.NET本身的代碼做一個比較
aspx頁面 <asp:Label id="Name" runat="Server" /><asp:Label id="Mail" runat="Server" />
aspx.cs文件
User us = new User();
us.Name = "xxsssx";
us.Value ="80";
Name.Text=us.Name;
Mail.Text=us.Value
就我個人來看,模板引擎是需要的。視圖和控制的分離是必要的,但是我們要分清楚什麼是視圖,什麼是控制。是不是視圖就不能包含代碼和邏輯?肯定答案是否定的,因爲就算用了StringTemplate,你還是需要給它填充數據,而給它填充數據的代碼仍然是屬於視圖而不是控制或者有人乾脆就當作了模型。那麼既然這樣,爲什麼我們就不能用aspx頁面本身來作爲模板呢?它可以判斷,可以循環,可以分支,可以使用現成的控件。比如 <%
if(Helper.IsLogin()){
User u=Helper.GetLoginedUser();
%>
你的姓名是:<%=u.Name%>
<%}%>
我們把這種方法和StringTemplate的方法來比較一下。
aspx模板 StringTemplate
asp.net控件 支持 不支持
複雜顯示邏輯 支持 支持(未經測試所有可能性)
編輯器支持 支持 不支持
編譯檢測 支持 不支持
現在可能有個疑問了,aspx的頁面怎麼作爲模板來被調用呢?以訪問就直接看到了沒辦法生成靜態頁面啊?