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

4
我不确定我想要做的事情是否可行 - 我只是想使用AJAX调用用户控件并获取控件的呈现HTML。然而,当我尝试获取控件时,我会收到以下错误消息:
此类页面未被服务。
描述:您请求的页面类型未被服务,因为已经明确禁止。扩展名“.ascx”可能不正确。请查看下面的URL,并确保其拼写正确。
请求的URL:/Controls/ClientFormControl.ascx
是否可以使此类页面可服务,或者需要特定的调用方式?我知道在MVC框架中这样的事情很容易...
提前感谢。

在这种情况下,建议使用 ASP.NET AJAX 提供的“Update Panel”和“Script Manager”功能。您可以通过 AJAX 调用按需隐藏用户控件并显示它。 - Zeal
我认为@Claudio Redi的解决方案是最好的。 - Subin Jacob
2个回答

8

由于您没有提供代码,我不确定您是如何实现的。而且我也不确定为什么您需要这样奇怪的东西 :-) 这不是很常见,可能有其他替代方案。如果有更多细节信息,我们可以建议更好的选择。

我认为您可以这样做,但是您需要创建控件并以编程方式调用渲染,如下所示

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

在此之后,您需要将html变量附加到响应中。
此代码应放置在标记为WebMethod或HTTP处理程序的方法上,以便您可以从javascript中调用它。 示例:从javascript调用WebMethods 示例:从javascript调用HTTP处理程序

谢谢您的回答...很抱歉我表述得不够清楚,其实我只是想从用户控件中获取渲染后的HTML。我应该明确指出我想使用jQuery AJAX来获取控件的HTML。 - Brian DiCasa
1
页面生命周期怎么办?你只在这里调用了render。假设在page_load或其他事件中有启动逻辑呢? - davidfowl
是的,我知道,但如果他真的需要这样做,那么他就需要进行适应。这是一个权衡决策。 - Claudio Redi
我认为这是更好的解决方案。谢谢。 - Subin Jacob

4
您没有正确看待问题。用户控件必须包含在WebForm中才能呈现。
解决此问题的正确方法是创建一个只包含用户控件的页面,然后根据需要进行呈现/注入。
或者您可以使用UpdatePanel,然后在服务器端以编程方式将用户控件添加到当前页面(例如,在updatepanel_load事件中)。
(实际上,看起来我的第二个解决方案不起作用-现在正在检查它)
以下是一个很好的例子:http://geekswithblogs.net/rashid/archive/2007/08/11/Loading-UserControl-Dynamically-in-UpdatePanel.aspx 看起来窍门是一个占位符和我不知道的LoadControl()函数。
PlaceHolder1.Controls.Clear();
UserControl uc = (UserControl)LoadControl(controlPath);
PlaceHolder1.Controls.Add(uc);

1
简直不敢相信我没想到只需将控件放在页面上并调用该页面。有点糟糕的是你不能仅呈现控件本身...现在我必须制作一堆只包含控件标记的.aspx页面... - Brian DiCasa
1
我曾经有过这样的经历。第一次时我花了很长时间才意识到这点。这种方法唯一的问题就是你需要在客户端过滤掉HTML标签,除非你将它放入一个iframe中。你也可能会遇到一些事件处理方面的问题。 - Maxim Gershkovich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接