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

ASP.NET 動態加載用戶控件:基於接口的解耦實現

     編輯:ASP.NET 基礎

場景痛點

在 Web Forms 中動態加載 .ascx 用戶控件時,若直接強轉具體類型,會導致頁面與控件強耦合。引入接口可實現「面向抽象編程」,提升擴展性。

核心步驟

1. 定義接口

namespace Insus.NET
{
    public interface IGetUCable
    {
        UserControl GetUC();
    }
}

2. 建立用戶控件

Calculator.ascx:包含兩個 TextBox、一個 Button、一個 Label。

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Calculator.ascx.cs" Inherits="Calculator" %>
Number A: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
+ <br />
Number B: <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
<asp:Button ID="ButtonEqual" runat="server" Text="=" OnClick="ButtonEqual_Click1" /><br />
Result: <asp:Label ID="LabelResult" runat="server" Text=""></asp:Label>

3. 代碼後置實現接口

public partial class Calculator : System.Web.UI.UserControl, IGetUCable
{
    protected void ButtonEqual_Click1(object sender, EventArgs e)
    {
        decimal a = decimal.Parse(TextBox1.Text.Trim());
        decimal b = decimal.Parse(TextBox2.Text.Trim());
        LabelResult.Text = (a + b).ToString();
    }

    public UserControl GetUC() => this;
}

4. 頁面動態加載

protected void Page_Load(object sender, EventArgs e)
{
    IGetUCable uc = (IGetUCable)LoadControl("~/Calculator.ascx");
    form1.Controls.Add(uc.GetUC());
}

優勢

  • 頁面無需引用具體控件類型,僅依賴接口程序集。
  • 新增控件只需實現接口,符合開閉原則。
  • 便於單元測試與依賴注入擴展。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved