首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

anCMS 原理篇:從標籤到執行代碼的完整轉換實例

     編輯:ASP.NET 基礎

核心理念:一切皆「替換」

anCMS 採用模板標籤預處理機制:HTML 模板中的自定義標籤經解析替換,生成可直接執行的 ASP.NET 伺服器端代碼。本文通過兩個完整實例演示轉換全過程。

實例一:資料繫結列表(alist)

原始模板標籤

<!--{an:alist filed=[title,time] category=[#] num=[10] page=[true] sort=[time desc]}-->
<li><span class="fr_time">${2}</span><a href="$href[articleview][{"id",#0}]">${1}</a></li>
<!--{/an}-->

說明: $href[articleview][{"id",#0}] 代表生成 URL:/article/view/{id},後續文章將詳細解析路由機制。

轉換後 ASP.NET 執行代碼

<script runat="server">
protected override void OnLoad(EventArgs e) {
    MyHashtable.Add("DFE3B56EB5D720382BB90CF468D83C35", 
        Article("TextFile.ID,title,time", 1, 8, "time desc", "", "", ""));
}
</script>

<% 
if(1==1) {
    var myRows = MyRows("DFE3B56EB5D720382BB90CF468D83C35");
    if (myRows != null) {
        foreach (var a in myRows) { %>
            <li>
                <span class="fr_time"><%=TimeFormart(a[2],"yyyy-MM-dd")%></span>
                <a href="<%=UrlRoute("articleview",new string[,]{ {"id",a[0].ToString()}})%>"><%=a[1]%></a>
            </li>
        <% }
    } else { %>
        <p style='margin:10px;'>沒有相關信息</p>
    <% }
} %>

關鍵點解析

  • MyHashtable.Add(): 將查詢結果集緩存至 MyHashtable,鍵為 MD5 生成的唯一標識,值為業務方法 Article(...) 返回的資料集。
  • 資料繫結迴圈: 通過 MyRows(key) 取得資料,迴圈輸出模板內容,佔位符 ${n} 對應陣列索引 a[n]。
  • 日期格式化: TimeFormart(a[2],"yyyy-MM-dd") 處理時間顯示。
  • URL 路由生成: UrlRoute("articleview", new string[,]{{"id",a[0].ToString()}}) 動態生成友好 URL。
  • 空數據處理: 自動輸出「沒有相關信息」提示。

實例二:分頁標籤(alistpager)

原始模板標籤

<!--{an:alistpager category=[#]}-->
$pager[articlelist][{"category","#category"}][10]
<!--{/an}-->

分頁效果圖: 分頁效果展示

轉換後 ASP.NET 執行代碼

<script runat="server">
protected override void OnLoad(EventArgs e) {
    MyHashtable.Add("386D9595D2FBD4C65F5D1B28BAA8FD96", ArticlePager("","#",""));
}
</script>

<% 
if(1==1) {
    var myRows = MyRows("386D9595D2FBD4C65F5D1B28BAA8FD96");
    if (myRows != null) {
        foreach (var a in myRows) { %>
            <%=Paging("articlelist",new string[,]{{"category","#category"}},10,a[0])%>
        <% }
    } else { %>
        <p style='margin:10px;'>沒有相關信息</p>
    <% }
} %>

分頁邏輯解析

  • ArticlePager 返回分頁所需的總記錄數等元數據
  • Paging(...) 方法根據傳入參數(列表名、查詢條件、每頁數量、總記錄數)生成完整分頁 HTML
  • 模板中僅需一行 $pager[...] 即可輸出完整分頁導航

系統現狀與展望

目前 anCMS 核心功能已覆蓋企業站點 90% 以上需求,會員系統正在開發中。作者獨自開發,技術術語可能不規範,猶豫是否開源,但決定發文自勉,期待同行交流指正。

設計哲學啟示

「包羅萬象,基本上所有的綁定數據都可以用了。」—— 以最小核心解決最大共性問題,是優秀框架設計的精髓。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved