2011-03-31 58 views
5

我想使用jquery ajax加載用戶控件。我發現的一個可能是通過通用處理程序加載用戶控件。任何人都可以幫我解決問題。這裏是我用來調用控件的ajax代碼。我們如何使用泛型處理函數加載usercontrol?

<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

沒有必要創建一個'Page'對象以呈現'UserControl'。刪除該代碼,你會沒事的。 – 2011-03-31 12:24:24

回答

3

看來page.Formnull這裏,這就是爲什麼你已經有了一個空引用異常。你可以添加你的用戶控件到頁面的控件集合,而不是:

page.Controls.Add(ctrl); 

您也可以使用HttpServerUtility.Execute方法頁面渲染:

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文章由Scott Guthrie的覆蓋你的問題。

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()); 
相關問題