在 Web Forms 中動態加載 .ascx 用戶控件時,若直接強轉具體類型,會導致頁面與控件強耦合。引入接口可實現「面向抽象編程」,提升擴展性。
namespace Insus.NET
{
public interface IGetUCable
{
UserControl GetUC();
}
}
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>
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;
}
protected void Page_Load(object sender, EventArgs e)
{
IGetUCable uc = (IGetUCable)LoadControl("~/Calculator.ascx");
form1.Controls.Add(uc.GetUC());
}