UserControl中的Web控件为空

本文关键字:控件 Web 中的 UserControl | 更新日期: 2023-09-27 17:54:03

我已经建立了一个小的用户控件,它本质上是一个下拉列表,根据Target-Property的设置有一些预设值。

代码如下:

public partial class Selector : System.Web.UI.UserControl
{
    public string SelectedValue { get {return this.ddl.SelectedValue; } }
    public int SelectedIndex { get { return this.ddl.SelectedIndex; } }
    public ListItem SelectedItem { get { return this.ddl.SelectedItem; } }
    private string target;
    public string Target { get { return this.target; } set { this.target = value; } }
    protected void Page_Load(object sender, EventArgs e)
    {
        ddl.DataSource = target=="Group"?Util.GetAllGroups(Session["sessionId"].ToString()):Util.GetAllUsers(Session["sessionId"].ToString());
        ddl.DataBind();
    }
}

ASP-Markup:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Selector.ascx.cs" Inherits="InspireClient.CustomControls.Selector" %>
<asp:DropDownList runat="server" ID="ddl">
</asp:DropDownList>

如果我插入我的选择器到aspx-Page它工作得很好。例子:

<SCL:Selector Target="Group" runat="server" />

但是,如果我以编程方式像这样添加

ctrl = new Selector();
ctrl.Target = "User";

下拉列表"ddl"为空,应用程序(逻辑上)抛出错误。Page_Load是错误的方法做这样的事情?我做错了什么?

我应该补充一句,"ctrl"是动态类型的,不确定这是否与它有关。

提前感谢!

丹尼斯

UserControl中的Web控件为空

因为你是动态添加一个用户控件,而不是一个"简单的" web控件,你应该使用LoadControl()方法来实例化它:

protected void Page_Load(object sender, EventArgs e)
{
    Selector yourControl = (Selector) LoadControl("Selector.ascx");
    yourControl.Target = "User";
    Controls.Add(yourControl);
}