Asp.net 如何使用泛型处理程序加载usercontrol?

Asp.net 如何使用泛型处理程序加载usercontrol?,asp.net,ajax,generics,user-controls,handler,Asp.net,Ajax,Generics,User Controls,Handler,我想使用jqueryajax加载一个用户控件。我发现一种可能的方法是通过泛型处理程序加载usercontrol。有人帮我吗。这里是我用来调用控件的ajax代码 <script type="text/javascript"> function fillSigns() { $.ajax({ url: "usercontrolhandler.ashx?control=signs.ascx",

我想使用jqueryajax加载一个用户控件。我发现一种可能的方法是通过泛型处理程序加载usercontrol。有人帮我吗。这里是我用来调用控件的ajax代码

 <script type="text/javascript">
 function fillSigns() { 
                $.ajax({
                    url: "usercontrolhandler.ashx?control=signs.ascx",
                    context: document.body,
                    success: function (data) {                       
                        $('#signdiv').html(data);
                    }
                });
            }  
 </script>
此代码在下面显示的行中引发“找不到对象引用”错误

 page.Form.Controls.Add(ctrl);

似乎
page.Form
在这里是
null
,这就是为什么会出现null引用异常。您可以将用户控件添加到页面的控件集合:

page.Controls.Add(ctrl);
您还可以使用以下方法进行页面呈现:

StringWriter output = new StringWriter();
HttpContext.Current.Server.Execute(page, output, false);
最后看一看Scott Guthrie的一篇文章,这篇文章涵盖了您的问题。

试试这个:

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


无需创建
页面
对象来呈现
用户控件
。删除那个代码,你就没事了。
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());