2011-05-02 20 views
9

मैंने एक छोटा सा उपयोगकर्ता नियंत्रण बनाया है जो अनिवार्य रूप से ड्रॉप-डाउनलिस्ट है जो कुछ प्रीसेट मानों के साथ लक्षित-संपत्ति सेट पर आधारित है।उपयोगकर्ता नियंत्रण के भीतर वेब नियंत्रण शून्य?

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(); 
    } 
} 

एएसपी-मार्कअप::

यहाँ कोड है

<%@ 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" की तरह है तो उसे जोड़ने रिक्त है और आवेदन (तार्किक) एक त्रुटि फेंकता है। क्या पृष्ठ गलत है लोड करना विधि ऐसी चीज करने के लिए? मैं क्या गलत कर रहा हूं?

मुझे जोड़ना चाहिए, "ctrl" प्रकार गतिशील है, यह सुनिश्चित नहीं है कि इसका इसके साथ कुछ लेना है या नहीं।

अग्रिम धन्यवाद!

डेनिस

उत्तर

18

जब से तुम किसी उपयोगकर्ता नियंत्रण और नहीं एक "सरल" वेब नियंत्रण जोड़ रहे हैं, तो आप इसे का दृष्टांत को LoadControl() विधि का उपयोग करना चाहिए:

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

धन्यवाद, यह काम करता है! इसे सामान्य तरीके से तुरंत चालू करने के बजाय इसके पीछे क्या विचार है? –

+1

@ डेनिस, उपयोगकर्ता नियंत्रण वास्तव में "सामान्य" को तत्काल नहीं ठहराया जा सकता है, क्योंकि 'ascx' फ़ाइल में परिभाषित मार्कअप को क्लास-बैक क्लास से प्राप्त कक्षा में गतिशील रूप से लपेटा जाना चाहिए (सटीक वही चीज़' aspx' के लिए होती है पृष्ठों)। कोड-बैक क्लास को इंस्टेंट करने से आपको केवल नियंत्रण व्यवहार का आधा हिस्सा मिल जाता है। –

+0

यह काम करता है! मेरे लिए दूसरी लाइन लागू नहीं होती है। उपयोगकर्ता नियंत्रण पर मेरा वेब नियंत्रण अब शून्य नहीं है !!! यहां मेरा है (पैटर्न के साथ मदद करने के लिए): \t इंडेनिटर कंट्रोल इंडेनिटर कंट्रोल = (इंडेनिटर कंट्रोल) लोडकंट्रोल ("इंडेनिटर कंट्रोल.एक्सएक्स"); \t \t नियंत्रण। जोड़ें (indemnitorDataControl); –

संबंधित मुद्दे