【问题标题】:Web Controls within UserControl null?UserControl 中的 Web 控件为空?
【发布时间】:2011-08-16 20:57:03
【问题描述】:

我构建了一个小型用户控件,它本质上是一个 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 标记:

<%@ 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" 为 null 并且应用程序(逻辑上)抛出错误。 Page_Load 是错误的方法来做这样的事情吗?我做错了什么?

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

提前致谢!

丹尼斯

【问题讨论】:

    标签: c# asp.net dynamic user-controls pageload


    【解决方案1】:

    由于您是动态添加用户控件而不是“简单”网络控件,因此您应该使用LoadControl() 方法对其进行实例化:

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

    【讨论】:

    • 谢谢,这行得通!这背后的想法究竟是什么,而不是以正常方式实例化它?
    • @Dennis,用户控件不能真正“正常”实例化,因为ascx 文件中定义的标记必须动态包装在派生自代码隐藏类的类中(确切的aspx 页面也会发生同样的事情)。实例化代码隐藏类只会给你一半的控制行为。
    • 这行得通!对我来说,第二行不适用。我在用户控件上的 web 控件不再为空!!!这是我的(帮助模式): IndemnitorControl indemnitorControl = (IndemnitorControl) LoadControl("IndemnitorControl.ascx"); Controls.Add(indemnitorDataControl);
    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2010-09-22
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多