我构建了一个小型用户控件,它本质上是一个 DropDownList,其中包含一些基于目标属性设置的预设值。
这是代码:
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”为空,应用程序(逻辑上)抛出错误。 Page_Load 做这样的事情是错误的方法吗?我究竟做错了什么?
我应该补充一点,“ctrl”是动态类型,不确定这是否与它有关。
提前致谢!
Dennis
由于您动态添加用户控件而不是“简单”Web 控件,因此您应该使用加载控制() http://msdn.microsoft.com/en-us/library/t9ecy7tf.aspx实例化它的方法:
protected void Page_Load(object sender, EventArgs e)
{
Selector yourControl = (Selector) LoadControl("Selector.ascx");
yourControl.Target = "User";
Controls.Add(yourControl);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)