首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

ASP.NET 動態網頁連接數據庫:從靜態 HTML 遷移到 Repeater 數據綁定

     編輯:程式設計疑難解答

遷移策略

保留現有 HTML 結構作為模板,使用 ASP.NET 數據綁定控件(Repeater/ListView/GridView)實現動態渲染。

核心步驟

1. 提取重復 HTML 片段作為 ItemTemplate

<!-- 原靜態 HTML (每篇文章重復部分) -->
<div class="post">
    <h2>文章標題</h2>
    <span class="author">作者名</span>
    <span class="time">2024-01-15</span>
    <div class="content">文章內容摘要...</div>
</div>

2. 使用 Repeater 控件綁定

<asp:Repeater ID="rptPosts" runat="server">
    <ItemTemplate>
        <div class="post">
            <h2><%# Eval("Title") %></h2>
            <span class="author"><%# Eval("Author") %></span>
            <span class="time"><%# Eval("PublishTime", "{0:yyyy-MM-dd}") %></span>
            <div class="content"><%# Eval("Summary") %></div>
        </div>
    </ItemTemplate>
    <SeparatorTemplate><hr /></SeparatorTemplate>
    <HeaderTemplate><div class="post-list"></HeaderTemplate>
    <FooterTemplate></div></FooterTemplate>
</asp:Repeater>

3. 後台代碼綁定數據

protected void Page_Load(object sender, EventArgs e) {
    if (!IsPostBack) {
        BindPosts();
    }
}

private void BindPosts() {
    string connStr = ConfigurationManager.ConnectionStrings["BlogDB"].ConnectionString;
    string sql = "SELECT Title, Author, PublishTime, Summary FROM Posts ORDER BY PublishTime DESC";
    
    using (SqlConnection conn = new SqlConnection(connStr))
    using (SqlCommand cmd = new SqlCommand(sql, conn))
    using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) {
        DataTable dt = new DataTable();
        adapter.Fill(dt);
        rptPosts.DataSource = dt;
        rptPosts.DataBind();
    }
}

進階優化

優化點方案代碼示例
分頁DataPager + ListView 或 GridView + PagerSettingsListView 內置分頁支持
參數化查詢防注入SqlParametercmd.Parameters.AddWithValue("@cat", category)
緩存減少 DB 壓力OutputCache / MemoryCache[%@ OutputCache Duration="60" VaryByParam="*" %]
異步加載提升響應PageAsyncTask / async/awaitpublic async Task BindPostsAsync()
前端模板引擎Knockout/Vue/React + WebAPI分離前後端,Repeater 僅輸出 JSON

Repeater vs GridView vs ListView

控件HTML 控制度內置功能性能推薦場景
Repeater完全控制 (無外層 table)無 (純模板)最輕量、最快自定義佈局、博客列表、產品展示
GridView輸出 table,難定制分頁、排序、編輯、選擇較重後台管理、表格數據、快速原型
ListView完全控制分頁、排序、編輯、分組中等需要分頁/編輯的列表頁

數據訪問層最佳實踐 (ADO.NET 核心模式)

public class PostRepository {
    private readonly string _connStr;
    
    public PostRepository(string connStr) { _connStr = connStr; }
    
    public IEnumerable<Post> GetPosts(int page, int pageSize) {
        var posts = new List<Post>();
        string sql = @"SELECT Title, Author, PublishTime, Summary 
                       FROM Posts ORDER BY PublishTime DESC
                       OFFSET @offset ROWS FETCH NEXT @pageSize ROWS ONLY"; // SQL Server 2012+
        
        using (var conn = new SqlConnection(_connStr))
        using (var cmd = new SqlCommand(sql, conn)) {
            cmd.Parameters.AddWithValue("@offset", (page - 1) * pageSize);
            cmd.Parameters.AddWithValue("@pageSize", pageSize);
            conn.Open();
            using (var reader = cmd.ExecuteReader()) {
                while (reader.Read()) {
                    posts.Add(new Post {
                        Title = reader.GetString(0),
                        Author = reader.GetString(1),
                        PublishTime = reader.GetDateTime(2),
                        Summary = reader.GetString(3)
                    });
                }
            }
        }
        return posts;
    }
}

參考資源

總結

將靜態 HTML 片段提取為 Repeater 的 ItemTemplate,後台通過 ADO.NET 查詢數據綁定,是從靜態頁遷移到動態數據驅動的最輕量、可控方案。保留 HTML 結構不變,僅在動態數據點插入 <%# Eval("Field") %> 表達式,實現零重寫遷移。

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