2011-03-31 18 views
5

मैं jquery AJAX का उपयोग कर उपयोगकर्ता नियंत्रण लोड करना चाहता हूं। मुझे लगता है कि जेनेरिक हैंडलर के माध्यम से उपयोगकर्ता नियंत्रण लोड करना संभव है। कोई भी मुझे plsss मदद करते हैं। यहां AJAX कोड मैं नियंत्रण कॉल करने के लिए उपयोग कर रहा हूँ।जेनेरिक हैंडलर का उपयोग करके हम उपयोगकर्ता नियंत्रण कैसे लोड कर सकते हैं?

<script type="text/javascript"> 
function fillSigns() { 
       $.ajax({ 
        url: "usercontrolhandler.ashx?control=signs.ascx", 
        context: document.body, 
        success: function (data) {      
         $('#signdiv').html(data); 
        } 
       }); 
      } 
</script> 

और यहाँ हैंडलर फ़ाइल

public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "text/plain"; 
     Page page = new Page(); 
     UserControl ctrl = (UserControl)page.LoadControl("~/" + context.Request["control"] + ".ascx");  
     page.Form.Controls.Add(ctrl); 

     StringWriter stringWriter = new StringWriter(); 
     HtmlTextWriter tw = new HtmlTextWriter(stringWriter); 
     ctrl.RenderControl(tw); 
     context.Response.Write(stringWriter.ToString()); 
    } 

में कोड इस कूट नीचे लाइन पर ऑब्जेक्ट संदर्भ नहीं मिला त्रुटि को जन्म देती है।

page.Form.Controls.Add(ctrl); 
+0

'UserControl' रेंडर करने के लिए एक' Page' वस्तु बनाने के लिए कोई जरूरत नहीं है। उस कोड को हटा दें और आप ठीक हो जाएंगे। –

उत्तर

3

ऐसा लगता है page.Form यहाँ null है, यही कारण है कि आप एक अशक्त संदर्भ अपवाद पास यह है।

StringWriter output = new StringWriter(); 
HttpContext.Current.Server.Execute(page, output, false); 

और अंत में जो शामिल किया गया स्कॉट गुथरी द्वारा Tip/Trick: Cool UI Templating Technique to use with ASP.NET AJAX for non-UpdatePanel scenarios लेख पर एक नज़र डालें:

page.Controls.Add(ctrl); 

आप पृष्ठ प्रतिपादन के लिए HttpServerUtility.Execute विधि इस्तेमाल कर सकते हैं: आपके लिए पृष्ठ के नियंत्रण संग्रह करने के लिए अपने उपयोगकर्ता नियंत्रण जोड़ सकता है तुम्हारी समस्या।

1

इस प्रयास करें:

Page page = new Page {ViewStateMode = ViewStateMode.Disabled}; 
HtmlForm form = new HtmlForm { ViewStateMode = ViewStateMode.Disabled }; 
form.Controls.Add(ctrl); 
page.Controls.Add(form); 

तो:

StringWriter stringWriter = new StringWriter(); 
HtmlTextWriter tw = new HtmlTextWriter(stringWriter); 
page.RenderControl(tw); 
context.Response.Write(stringWriter.ToString()); 
संबंधित मुद्दे

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