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