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

问题描述 投票:0回答:2

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

不提供此类页面。

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

请求的 URL:/Controls/ClientFormControl.ascx

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

提前致谢。

asp.net ajax asp.net-ajax user-controls
2个回答
8
投票

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

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

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

此后,您必须将

html
变量附加到您的响应中。

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

示例:从 javascript 调用 WebMethods

示例:从 javascript 调用 HTTP 处理程序


4
投票

你没有正确看待问题。除非用户控件包含在 WebForm 中,否则无法呈现。

此问题的正确解决方案是创建一个仅包含用户控件的页面,然后根据需要渲染/注入它。

或者,您可以使用 updatepanel,然后在服务器端以编程方式将用户控件添加到当前页面(类似于 updatepanel_load 事件)。

(实际上看起来我的第二个解决方案不起作用 - 现在检查一下)

跟进这里是一个很好的例子:链接

看起来技巧是一个占位符和一个我不知道的 LoadControl() 函数。 System.Web.UI.TemplateControl.LoadControl

PlaceHolder1.Controls.Clear();
UserControl uc = (UserControl)LoadControl(controlPath);
PlaceHolder1.Controls.Add(uc);
© www.soinside.com 2019 - 2024. All rights reserved.