【发布时间】:2009-06-16 12:23:45
【问题描述】:
我引用的是article reference
动态创建 UserControl 并通过 jQuery 将其传回页面。
当我只是在 UserControl“Hello World”中做一个简单的文本时,一切都很好......但是,当我尝试在控件上放置交互式控件时,我在我的 WebMethod 中收到以下消息(所以 jQuery 调用的东西是不相关)(进一步的测试表明,文本框和按钮会导致问题,而不是标签)
执行处理程序“System.Web.UI.Page”的子请求时出错
这是网络方法:
[WebMethod]
public static string GetCtrl(string cname)
{
StringWriter sw = new StringWriter();
Page p = new Page();
Control c = p.LoadControl("~/Controls/" + cname);
p.Controls.Add(c);
try
{
HttpContext.Current.Server.Execute(p, sw, false);
}
catch (Exception err)
{
return err.Message;
}
sw.Close();
return sw.ToString();
}
异常发生在 Server.Execute 调用期间。
可能无法解决,我只是想知道为什么交互式控件会导致这种情况。
编辑: 接受下面的建议,我更深入地研究并发现内部异常表明它必须位于标有 runat="server" 的表单标记内,而我在表单标记内的 aspx 页面上显示此控件...我的猜测是,那里必须有某种“asp.net 魔术”连接才能使控件运行...无论如何,无论如何,知道如何呈现带有控件的页面会很好(即使它在这种情况下无法使用)
所以我查看了上面代码的输出,对于那些好奇的人:
<span id="ctl00_lbl1">abc: </span>
所以控件在页面上正确渲染(只有标签id ='lbl1'),但是,控件本身是渲染的,页面内容根本不存在......有没有办法生成页面源也是? (我一定不明白 Server.Execute 函数的工作方式)
【问题讨论】:
-
根据一个建议,我更深入地检查了调试信息,发现了以下内部异常: 内部异常如下(比我之前的稍微有用):Control 'ctl00_btn1' 'Button' 类型的必须放在带有 runat=server 的表单标签内。因为这是在 Page 对象上呈现的...我想知道是否需要做一些“准备工作”才能使该页面成为正确的 aspx 页面?...因为我基本上是在动态构建它(我们甚至不会谈论将整个内容嵌入另一个页面的不当性)
标签: asp.net user-controls