熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

使用aspx頁面作為模板引擎的一種實現

2022-06-13   來源: .NET編程 

  什麼是模板引擎?說白了就是能夠自動替換占位符的替換引擎原理上也就是兩個步驟找到》替換但是替換不是簡單的替換包括

  簡單變量替換();
        復雜變量替換();
        對象變量替換();
        鍵值類型替換();
        自定義集合替換();
        同時顯示多個變量();
        模板調用();
        給調用模板傳參數();
        值模板();
        簡單循環();
        交差循環顯示();
        通過模板交差循環();
        條件判斷();
        從文件中創建模板();

  常用的模板引擎StringTemplate和velocity差不多都是按照這種模式來設計的但是這樣子真的就是我們需要的嗎?我們拿一段典型的StringTemplate的模板代碼來看看

  首先是在模板文件中

  姓名$UserName$ 年齡:$UserValue$

  然後是在代碼裡          User us = new User();
        usName = xxsssx;
        usValue =;
        StringTemplate st = new StringTemplate($UserName$$UserValue$);
        stSetAttribute(User us);
        ConsoleWriteLine(stToString());

  [NextPage]

  那麼我們來和ASPNET本身的代碼做一個比較

  aspx頁面          <asp:Label id=Name runat=Server /><asp:Label id=Mail runat=Server />
        aspxcs文件
        User us = new User();
        usName = xxsssx;
        usValue =;
        NameText=usName;
        MailText=usValue

  就我個人來看模板引擎是需要的視圖和控制的分離是必要的但是我們要分清楚什麼是視圖什麼是控制是不是視圖就不能包含代碼和邏輯?肯定答案是否定的因為就算用了StringTemplate你還是需要給它填充數據而給它填充數據的代碼仍然是屬於視圖而不是控制或者有人干脆就當作了模型那麼既然這樣為什麼我們就不能用aspx頁面本身來作為模板呢?它可以判斷可以循環可以分支可以使用現成的控件比如          <%
        if(HelperIsLogin()){
        User u=HelperGetLoginedUser();
        %>
        你的姓名是:<%=uName%>
        <%}%>

  我們把這種方法和StringTemplate的方法來比較一下

  aspx模板    StringTemplate
        控件         支持         不支持
        復雜顯示邏輯     支持         支持(未經測試所有可能性)
        編輯器支持         支持         不支持
        編譯檢測             支持         不支持

  現在可能有個疑問了aspx的頁面怎麼作為模板來被調用呢?以訪問就直接看到了沒辦法生成靜態頁面啊?

  其實解決的方法很簡單只需要ServerExecute()就可以將執行的aspx頁面運行的結果以一個TextWriter返回這樣子要怎麼處理還不是看我們怎麼高興啦哈哈

  記得之前有人提過類似方法不過有人可能會質疑那不是還有美工也會?其實回過頭一想如果你告訴美工<%=uName%>就是代表用戶的姓名那麼也不會需要美工學習全套的而其實就美工來說如果學習簡單實用都有困難那麼學習StringTemplate的全套模板語法和靈活掌握使用方法可能更加讓人郁悶如果這些工作都給程序員來完成的話那麼已經是程序員熟練掌握的c#語法是不是更加的平易近人呢?況且還可以智能感知菜單和編譯檢測支持所以我覺得在大多數情況下這種方法是比較爽的一種方式


From:http://tw.wingwit.com/Article/program/net/201311/12314.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.