2011-03-31 14 views
5

Quiero cargar un control de usuario usando jquery ajax. Una posible que encontré es cargar usercontrol a través de controlador genérico. Alguien me ayuda plsss. aquí el código ajax que estoy usando para llamar al control.¿cómo podemos cargar el control de usuario usando un manejador genérico?

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

y aquí está el código en el archivo de controlador de

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

Este código de error plantea referencia a un objeto que no se encuentra en la línea de abajo se muestra.

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

No hay necesidad de crear un objeto 'Page' para hacer que el' UserControl'. Elimina ese código y estarás bien. –

Respuesta

3

Parece page.Form es null aquí, es por eso que tienes una excepción de referencia nula. Se podría añadir el control de usuario a la colección de control de la página en lugar:

page.Controls.Add(ctrl); 

También es posible usar HttpServerUtility.Execute método para la renderización de páginas:

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

Y, por último echar un vistazo a Tip/Trick: Cool UI Templating Technique to use with ASP.NET AJAX for non-UpdatePanel scenarios artículo de Scott Guthrie, que cubre tu problema.

1

Prueba esto:

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

a continuación:

StringWriter stringWriter = new StringWriter(); 
HtmlTextWriter tw = new HtmlTextWriter(stringWriter); 
page.RenderControl(tw); 
context.Response.Write(stringWriter.ToString()); 
Cuestiones relacionadas