c# - ASP.NET: एक UserControl बनाने के लिए संभव है जिसमें मार्कअप सामग्री शामिल है?




user-controls (2)

मैं कुछ हासिल करने की कोशिश कर रहा हूं जो गूगल जवाब देने में सक्षम नहीं है। मैं एक asp.net usercontrol बनाने का प्रयास कर रहा हूं, जब मैं इसे खुले बंद टैग में सामग्री रखता हूं, तब भी इसमें शामिल होगा कि मैं अभी भी माता-पिता से आईडी के माध्यम से इसकी सामग्री को प्राप्त कर सकूं। यहां मैं क्या हासिल करना चाहता हूं, इसका एक उदाहरण है।

usercontrol:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ctrlGENE_CollapsiblePanel.ascx.cs"
    Inherits="Controls_GenericsControls_ctrlGENE_CollapsiblePanel" %>
<asp:Panel ID="pnlHeader" CssClass="SnapPanelHeader" runat="server">
    <h3>
        <asp:Literal ID="litTitle" Text='<%# Text %>' runat="server" />
    </h3>
    <div class="SnapPanelHeader-img">
        <img id="imgOpenClose" src="/images/application/close.jpg" alt="" />
    </div>
</asp:Panel>
<asp:PlaceHolder runat="server" ID="pnlContent">
// **HERE I WANT TO INCLUDE THE INSIDE MARKUP**
</asp:PlaceHolder>
<act:CollapsiblePanelExtender runat="server" TargetControlID="pnlContent" ImageControlID="imgOpenClose"
    ExpandControlID="imgOpenClose" CollapseControlID="imgOpenClose" CollapsedImage="/images/application/open.jpg"
    ExpandedImage="/images/application/close.jpg" CollapsedSize="0" TextLabelID="litTitle">
</act:CollapsiblePanelExtender>

अभिभावक पृष्ठ जिसमें नियंत्रण शामिल है:

<uc:MyUserControl ID="clpTest" runat="server">
     <asp:Literal ID="litText" runat="server" />
</uc:MyUserControl>

इस तरह मैं करने के लिए Parent.cs फ़ाइल में सक्षम होगा:

litText.Text = "Anything";

मुझे पता है कि हम यहां शो के रूप में आईटेमप्लेट इंटरफेस के साथ कुछ समान प्राप्त कर सकते हैं: http://msdn.microsoft.com/en-us/library/36574bf6.aspx

यह ऐसा दिखेगा:

<uc:MyUserControl ID="clpTest" runat="server">
     <ItemTemplate>
          <asp:Literal ID="litText" runat="server" />
     </ItemTemplate>
</uc:MyUserControl>

लेकिन अगर मैं ऐसा करता हूं तो मैं लिट टेक्स्ट की संपत्ति का उपयोग नहीं कर पाऊंगा और एकमात्र तरीका मैं इसे खोजकंट्रोल के साथ मिल सकता हूं, जिसे मैं बचाना चाहता हूं

अगर कोई मेरे लक्ष्य को एक ही रास्ता या किसी अन्य तक पहुँचा सकता है तो इसका कोई भी संकेत है?

धन्यवाद


फ़ाइल के पीछे उपयोगकर्ता नियंत्रण के कोड में एक सार्वजनिक संपत्ति जोड़ें यदि आपको डिजाइन समय समर्थन की आवश्यकता है तो इसमें और भी काम शामिल है, लेकिन सरल परिदृश्यों के लिए जिस तरह से आपने रेखांकित किया है, वह पर्याप्त होना चाहिए।

फिर माता-पिता के पृष्ठ में इसका उपयोग करने के लिए मूल्य निर्धारित करें और इसे उपयोगकर्ता नियंत्रण में पढ़ें और उस मूल्य का उपयोग करें जो आपको वहां की आवश्यकता होती है।


ठीक है, मैं इसे तय किया है कि मैं इसका समाधान करता हूं:

MyUserConstrol.ascx फ़ाइल में मैंने एक प्लेसहोल्डर रखा है जहां मुझे आंतरिक HTML दिखाना था:

<asp:PlaceHolder runat="server" ID="plhContent" />

फिर MyUserControl.ascx.cs फ़ाइल में मैंने उस विशेषता को कक्षा में जोड़ा है:

[ParseChildren(false)]
[PersistChildren(true)]

और मैंने इसे फाइल में जोड़ा:

public void RegisterUpdatePanel(UpdatePanel panel)
{
    MethodInfo m =
        (from methods in typeof (ScriptManager).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)
         where methods.Name.Equals("System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel")
         select methods).First();

    m.Invoke(ScriptManager.GetCurrent(Page), new object[] {panel});
}

protected override void CreateChildControls()
{
    for (int i = 0; i < Controls.Count; i++)
        if (Controls[i] is MyLastControl)
            while (i + 2 < Controls.Count)
            {
                // In cas there is an updatepanel in the control we are moving
                // We are registering an event to register the updatepanel
                // to the scriptmanager again
                SearchUpdatePanel(Controls[i + 2]);
                plhContent.Controls.Add(Controls[i + 2]);
            }
    base.CreateChildControls();
}

private void SearchUpdatePanel(Control control)
{
    if (control is UpdatePanel)
        control.Unload += updPnl_Unload;

    foreach (Control childcontrol in control.Controls)
        SearchUpdatePanel(childcontrol);
}

protected void updPnl_Unload(object sender, EventArgs e)
{
    RegisterUpdatePanel((UpdatePanel) sender);
}

ध्यान दें कि मैंने अपने अंतिम नियंत्रण को myLastContol में एएससीक्स फाइल में रखा है, यह जानने के लिए कि आंतरिक HTML इंजेक्शन से पहले नियंत्रण क्या था, क्योंकि मुझे नहीं पता कि मैं क्या प्राप्त कर रहा हूं। प्रक्रिया मूल रूप से UserControl में नियंत्रण में लूप कहती है, जब आप UserControl के अंत तक पहुंच जाएंगे, तब सब कुछ बाद में माता-पिता से एचटीएमएल से ले लें और उन्हें प्लेसहोल्डर पर ले जाएं जहां मैं चाहता हूं।

मुझे उम्मीद है कि यह किसी की मदद करेगा

यहां कुछ ऐसे सूत्र दिए गए हैं जो मैंने अपना लक्ष्य हासिल करने के लिए प्रयोग किया था: UpdatePanel पंजीकृत करना





user-controls