我不确定我尝试做的是否可行 - 我只是想用AJAX调用用户控件并获取控件的渲染html。但是,当我尝试获取控件时,我收到以下错误消息:
此类网页未投放。
描述:未提供您请求的页面类型,因为它已被明确禁止。扩展名“.ascx”可能不正确。请查看下面的网址,确保拼写正确。
请求的网址:/Controls/ClientFormControl.ascx
是否可以使这种类型的页面可以使用,或者是否需要以特定方式调用它?我知道在MVC框架中这些事情很容易......
提前致谢。
答案 0 :(得分:8)
由于您没有提供任何代码,因此不确定您是如何做到这一点的。也不确定为什么你需要这样一个奇怪的东西:-)不常见,可能有另一种方法。您可以提供更多详细信息,以便我们建议更好的选择。
我会说你可以这样做,但你需要创建控件并以编程方式调用渲染器
TextWriter stringWriter = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
userControl.RenderControl(htmlWriter);
string html = stringWriter.ToString();
在此之后,您必须将html
变量附加到您的回复中。
此代码应放在标记为WebMethod或HTTP处理程序的方法上,以便您可以从javacript中调用它。
答案 1 :(得分:3)
您没有正确查看问题。除非它包含在WebForm中,否则无法呈现usercontrol。
此问题的正确解决方案是创建一个仅包含usercontrol的页面,然后根据需要呈现/注入它。
或者,您可以使用updatepanel,然后在服务器端以编程方式将usercontrol添加到当前页面(类似于updatepanel_load事件)。
(实际上看起来我的第二个解决方案无效 - 现在就检查出来)
如果要跟进,这是一个很好的例子:http://geekswithblogs.net/rashid/archive/2007/08/11/Loading-UserControl-Dynamically-in-UpdatePanel.aspx
看起来这个技巧是一个占位符和一个我不知道LoadControl()的函数。 System.Web.UI.TemplateControl.LoadControl
PlaceHolder1.Controls.Clear();
UserControl uc = (UserControl)LoadControl(controlPath);
PlaceHolder1.Controls.Add(uc);