9
我已經構建了一個小型的用戶控件,它實質上是一個DropDownList,它具有一些基於Target-Property設置的預設值。UserControl內的Web控件null?
下面的代碼:
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」是動態類型的,不知道這與它有什麼關係。
在此先感謝!
丹尼斯
謝謝,這個作品!這背後的想法究竟是什麼,而不是以正常的方式實例化它? – 2011-05-02 09:55:38
@Dennis,用戶控件不能真正地被「正常」實例化,因爲'ascx'文件中定義的標記必須動態地包裝在派生於代碼隱藏類的類中(「aspx」頁)。實例化代碼隱藏類只會給你一半的控制行爲。 – 2011-05-02 09:59:34
這個工程!對我而言,第二行不適用。我的用戶控件上的網頁控件不再爲空!這裏是我的(幫助模式):\t IndemnitorControl indemnitorControl =(IndemnitorControl)LoadControl(「IndemnitorControl.ascx」); \t \t Controls.Add(indemnitorDataControl); – 2016-02-19 02:02:22