根據條件動態決定載入哪個 `.ascx`,並需在載入時傳遞參數 (如 `cid`、`aid`)。
// 取得控制項虛擬路徑
string ascxPath = actionOne[1].ToString(); // 例如 "~/Controls/MyControl.ascx"
// 1. 載入控制項實例
UserControl uc = (UserControl)LoadControl(ascxPath);
// 2. 使用反射設定公開屬性
uc.GetType().GetProperty("cid")?.SetValue(uc, cid.ToString(), null);
uc.GetType().GetProperty("aid")?.SetValue(uc, id.ToString(), null);
// 3. 加入頁面容器
pageAscx.Controls.Add(uc);
public partial class MyControl : UserControl
{
private string _cid = "0";
private string _aid = "0";
public string cid
{
get => _cid;
set => _cid = value;
}
public string aid
{
get => _aid;
set => _aid = value;
}
protected void Page_Load(object sender, EventArgs e)
{
// 此時 cid、aid 已有值,可直接使用
LoadData(cid, aid);
}
}
public interface IParameterizedControl
{
void InitializeParameters(IDictionary parameters);
}
// 控制項實作介面
public partial class MyControl : UserControl, IParameterizedControl
{
public void InitializeParameters(IDictionary parameters)
{
if (parameters.TryGetValue("cid", out var v)) cid = v;
if (parameters.TryGetValue("aid", out var v)) aid = v;
}
}
// 載入端
if (uc is IParameterizedControl typed)
typed.InitializeParameters(new Dictionary { {"cid", cid}, {"aid", id} });