2010-06-18 114 views
4

我不知道我想要做什么是可能的 - 几乎我只是想使用AJAX调用用户控件并获取控件的呈现html。然而,当我试图获取我收到以下错误消息的控制:ASP.NET - 使用AJAX加载用户控件?

此类型的页不提供早餐。

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

请求的URL:/Controls/ClientFormControl.ascx

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

在此先感谢。

+0

在这种情况下,建议使用“更新面板”的“脚本管理”特色的ASP.NET AJAX提供。您可以隐藏用户控件,并根据需要通过AJAX调用显示它。 – Zeal 2010-06-18 17:50:57

+0

我认为最好的解决方案@Claudio Redi s – 2013-11-20 10:44:57

回答

3

你是不是在看问题的正确。除非它包含在WebForm中,否则无法呈现usercontrol。

正确的解决这个问题是只包含在其上的用户控件创建一个页面,然后渲染/根据需要注入它。

或者您可以使用一个UpdatePanel,然后将用户控件添加到当前页面程序在服务器端(在类似的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); 
+0

简直不敢相信我只是把控件放在一个页面上并调用页面。有些吮吸,你不能只是由自己渲染控制...现在我将不得不做一堆.aspx页面,只有控制的标签... – 2010-06-18 18:31:38

+1

我一直在那里做, 。花了我一段时间才第一次意识到。这种方法唯一的问题是你需要过滤出客户端的html标签,除非你把它放到iframe中。 此外,您可能会遇到一些事件处理方面的问题。 – 2010-06-18 18:34:13

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

+0

感谢您的回答...对不起,我含糊不清,几乎我只想从用户控件获取呈现的HTML。我应该指定我想用jQuery AJAX来获取控件的html。 – 2010-06-18 18:40:55

+1

页面生命周期如何?你只在这里调用渲染。假设page_load中有启动逻辑或其他事件之一? – davidfowl 2010-06-19 08:13:09

+0

是的,我知道,但如果他真的需要这样做,那么他需要加入。权衡决定。 – 2010-06-19 16:51:01