2008-11-03 20 views
6

में उपयोगकर्ता नियंत्रण को प्रोग्रामेटिक रूप से लोड करें मैं एक स्ट्रिंग में उपयोगकर्ता नियंत्रण प्रस्तुत करने की कोशिश कर रहा हूं। टोकन का उपयोग करने के लिए उपयोगकर्ता को सक्षम करने के लिए एप्लिकेशन स्थापित किया गया है और उपयोगकर्ता नियंत्रण प्रदान किए जाते हैं जहां टोकन पाए जाते हैं।एक एचटीएमएल पाठ लेखक

StringBuilder sb = new StringBuilder(); 
StringWriter sw = new StringWriter(sb); 
HtmlTextWriter writer = new HtmlTextWriter(sw); 

Control uc = LoadControl("~/includes/HomepageNews.ascx"); 
uc.RenderControl(writer); 
return sb.ToString(); 

कि कोड नियंत्रण से प्रस्तुत होती है घटनाओं पर नियंत्रण के Page_Load में कहा जाता है में से कोई भी सक्रिय हो रहे हैं। नियंत्रण में एक पुनरावर्तक आग की जरूरत है।

उत्तर

13

मैं पिछले कुछ समय से अपने ब्लॉग में स्कॉट गुथरी द्वारा प्रदान की निम्नलिखित कोड का उपयोग कर रहे:

public class ViewManager 
{ 
    public static string RenderView(string path, object data) 
    { 
     Page pageHolder = new Page(); 
     UserControl viewControl = (UserControl) pageHolder.LoadControl(path); 

     if (data != null) 
     { 
      Type viewControlType = viewControl.GetType(); 
      FieldInfo field = viewControlType.GetField("Data"); 
      if (field != null) 
      { 
       field.SetValue(viewControl, data); 
      } 
      else 
      { 
       throw new Exception("ViewFile: " + path + "has no data property"); 
      } 
     } 

     pageHolder.Controls.Add(viewControl); 
     StringWriter result = new StringWriter(); 
     HttpContext.Current.Server.Execute(pageHolder, result, false); 
     return result.ToString(); 
    } 
} 

object data पैरामीटर, उपयोगकर्ता नियंत्रण में डेटा के गतिशील लोड हो रहा है सक्षम बनाता है, और करने के लिए इस्तेमाल किया जा सकता एक सरणी या somethin समान के माध्यम से नियंत्रण में एक से अधिक चर इंजेक्षन।

यह कोड नियंत्रण में सभी सामान्य घटनाओं को आग लगा देगा।

You can read more about it here

सादर जेस्पर हाउगे

+0

कि HttpContext.Current.Server.Execute (pageHolder, परिणाम, झूठी); पैसा है –

+0

बस जो मैं खोज रहा था! धन्यवाद –

2

आपको पेज के नियंत्रण संग्रह या पृष्ठ पर नियंत्रण में इसे जोड़कर एक पृष्ठ पर नियंत्रण संलग्न करना होगा। इससे आपकी सभी समस्याओं का समाधान नहीं होगा जब तक आप सामान्य पृष्ठ प्रस्तुत करने के दौरान प्रतिपादन को स्पष्ट रूप से अक्षम करने के लिए कुछ नहीं करते हैं।

1

मैं ऊपर हाउगे की/स्कॉट गुथरी की विधि लिया और बदलाव ताकि आप प्रतिबिंब का उपयोग करें, या किसी विशेष इंटरफ़ेस को लागू करने एक UserControl संशोधित करने की जरूरत नहीं है। कुंजी को मैंने दृढ़ता से टाइप किए गए कॉलबैक को जोड़ा था कि प्रतिबिंब करने के बजाए रेंडरव्यू विधि कॉल के ऊपर है।

मैं सहायक विधि और उपयोग here

HTH, जॉन ब्लॉग

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