Веб-элементы управления внутри UserControl null? - PullRequest
9 голосов
/ 02 мая 2011

Я создал небольшой пользовательский элемент управления, который, по сути, представляет собой DropDownList с некоторыми предустановленными значениями, основанными на том, на что установлено свойство 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-страницу, он будет работать нормально. Пример:

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

Однако, если я программно добавлю это так

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

DropDownList "ddl" равен нулю, и приложение (логически) выдает ошибку. Является ли Page_Load неправильным методом для такой вещи? Что я делаю не так?

Я должен добавить, что "ctrl" относится к типу динамического, не уверен, имеет ли это какое-либо отношение к нему.

Заранее спасибо!

Денис

1 Ответ

19 голосов
/ 02 мая 2011

Поскольку вы динамически добавляете пользовательский элемент управления, а не «простой» веб-элемент управления, вы должны использовать метод LoadControl () , чтобы создать его экземпляр:

protected void Page_Load(object sender, EventArgs e)
{
    Selector yourControl = (Selector) LoadControl("Selector.ascx");
    yourControl.Target = "User";
    Controls.Add(yourControl);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...