ASP.NET - 使用AJAX加载用户控件?

时间:2010-06-18 17:34:25

标签: asp.net ajax asp.net-ajax user-controls

我不确定我尝试做的是否可行 - 我只是想用AJAX调用用户控件并获取控件的渲染html。但是,当我尝试获取控件时,我收到以下错误消息:

此类网页未投放。

描述:未提供您请求的页面类型,因为它已被明确禁止。扩展名“.ascx”可能不正确。请查看下面的网址,确保拼写正确。

请求的网址:/Controls/ClientFormControl.ascx

是否可以使这种类型的页面可以使用,或者是否需要以特定方式调用它?我知道在MVC框架中这些事情很容易......

提前致谢。

2 个答案:

答案 0 :(得分:8)

由于您没有提供任何代码,因此不确定您是如何做到这一点的。也不确定为什么你需要这样一个奇怪的东西:-)不常见,可能有另一种方法。您可以提供更多详细信息,以便我们建议更好的选择。

我会说你可以这样做,但你需要创建控件并以编程方式调用渲染器

TextWriter stringWriter = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
userControl.RenderControl(htmlWriter);
string html = stringWriter.ToString();

在此之后,您必须将html变量附加到您的回复中。

此代码应放在标记为WebMethod或HTTP处理程序的方法上,以便您可以从javacript中调用它。

Sample: Calling WebMethods from javascript

Sample: Calling HTTP Handlers from javascript

答案 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);