2012-01-16 13 views
5

में उपयोग मैं जहाँ मैं नियंत्रण चर या अंतर्निहित पेज से गुणों से कुछ डेटा के साथ खिलाया जा करने की जरूरत है कि एक वेब उपयोगकर्ता नियंत्रण हो गया।पीछे कोड से चर मूल्य प्राप्त करें और aspx पेज नियंत्रण

<%@ Control Language="C#" AutoEventWireup="False" CodeFile="Header.ascx.cs" Inherits="Site.UserControls.Base.Header" %> 
<asp:Literal runat="server" Text='<%# Testing %>' id="ltrTesting" /> 

codebehind

namespace Site.UserControls.Base 
{ 
    public partial class Header : UserControlBase 
    { 
     public string Testing = "hello world!"; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      //this.DataBind(); // Does not work 
      //PageBase.DataBind(); // Does not work 
      //base.DataBind(); // Does not work 
      //Page.DataBind(); // Does not work 
     } 
    } 
} 

मैं इस विषय पढ़ा है, लेकिन यह अभ्यस्त मेरी समस्या का समाधान, मुझे लगता है क्योंकि यह एक उपयोगकर्ता नियंत्रण है न कि पृष्ठ है बस। I want to get property value from code behind

+0

क्यों पीछे बजाय कोड से नियंत्रण करने के लिए मान सेट नहीं? नियंत्रण के पोर्टेबिलिटी की वजह से – Magnus

+0

@Magnus, कि निश्चित रूप से एक विकल्प है, लेकिन यह इस –

+0

ठीक .. पोर्टेबिलिटी कैसे से बाहर आखिरी विकल्प है? – Magnus

उत्तर

12

इस हल,

जब से मैं इस मामले में हमेशा की तरह में एक वेब उपयोगकर्ता नियंत्रण के लिए इस्तेमाल किया नीचे समाधान परिदृश्य काम नहीं करेंगे। लेकिन पेज कि उपयोगकर्ता नियंत्रण या वेब उपयोगकर्ता नियंत्रण ऊपर श्रृंखला की किसी भी materpage को नियंत्रित करता है में एक DataBind डालकर कोड

masterpage codebehind

public partial class MasterPages_MyTopMaster : System.Web.UI.MasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // Databind this to ensure user controls will behave 
     this.DataBind(); 
    } 
} 

ascx फ़ाइल काम शुरू कर दिया, सभी सुझाव दिया समाधान नीचे काम करता है ascx

की

<%@ Control Language="C#" AutoEventWireup="False" CodeFile="Header.ascx.cs" Inherits="Site.UserControls.Base.Header" %> 
1: <asp:Literal runat="server" Text='<%# DataBinder.GetPropertyValue(this, "Testing") %>' /> 
2: <asp:Literal runat="server" Text='<%# DataBinder.Eval(this, "Testing") %>' /> 
3: <asp:Literal runat="server" Text='<%# Testing2 %>' /> 

codebehind

namespace Site.UserControls.Base { public partial class Header : UserControlBase //UserControl { public string Testing { get { return "hello world!"; } } public string Testing2 = "hello world!"; protected void Page_Load(object sender, EventArgs e) { } } } 

प्रेरणा के लिए धन्यवाद!

6

आप नहीं आमतौर पर सर्वर नियंत्रण में scriplets डाल सकते हैं। लेकिन वहाँ एक आसान तरीके को बताया गया है: एक सादे HTML नियंत्रण का उपयोग करें:

<span id="ltrTesting"><%= this.Testing %></span> 
+0

एक सरल उपाय Thats लेकिन अगर मैं मान लीजिए कि अगर सौंपा मान शून्य नहीं है कि –

+1

कर अभ्यस्त एक वेब नियंत्रण है कि केवल renders अगर एक निश्चित मूल्य निर्दिष्ट किया जाए कि केवल renders एक कस्टम Webcontrol की तरह एक सा और अधिक उन्नत नियंत्रण का उपयोग करना चाहते हैं? यह –

+0

एडम के मुद्दों का एक अलग अलग सेट है, जो कि पहले से ही कवर और काम कर रहा है। यदि हम कोड से कुछ वेबकंट को मान देते हैं तो सब कुछ ठीक काम करता है। लेकिन क्यों एएसपीएक्स पेज से वैरिएबल वैल्यू एक्सेस करते समय यह क्यों काम नहीं करेगा। –

0

परीक्षण एक संपत्ति के बजाय एक क्षेत्र हो आज़मा कर देखें:

उदा

public string Testing 
{ 
    get { return "Hello World!"; } 
} 
+0

कम से कम अंतर नहीं करेगा। –

+0

क्षमा करें लेकिन नहीं, वह कुछ भी नहीं बदल पाएगा –

+0

कुछ बहस करने के बाद, यह समाधान का एक हिस्सा बन गया, मेरे बहाने। इसके लिए +1! –

1

या आप के पीछे कोड में शाब्दिक का पाठ गुण सेट कर सकते हैं:

ltrTesting.Text = "Hello World!"; 
+0

सच है, लेकिन मैं इसे कोड-पीछे से एक्सेस नहीं करना चाहता हूं :) –