我不确定我正在尝试做的是否可行--我只是想用AJAX调用一个用户控件,并获取控件的呈现html。但是,当我尝试获取控件时,我得到以下错误消息:此类型的页面不提供。产品描述:您所请求的页面不存在,可能已被删除或您输错了网址!扩展名“.ascx”可能不正确。请检查以下URL并确保其拼写正确。请求的URL:/Controls/ClientFormControl.ascx是否有可能使这种类型的页面可服务,或者有一个特定的方式,你需要调用它?我知道这些事情在MVC框架中很容易。先谢了。
xeufq47z1#
不知道你是怎么做到的,因为你没有提供代码。也不知道为什么你会需要这样一个奇怪的东西:-)不是很常见,可能有一个替代的方法。您可以提供更多细节,以便我们可以建议更好的选择。我认为你可以这样做,但是你需要像这样创建控件并调用渲染
TextWriter stringWriter = new StringWriter(); HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter); userControl.RenderControl(htmlWriter); string html = stringWriter.ToString();
在此之后,您必须将html变量附加到响应中。这段代码应该放在一个标记为WebMethod或HTTP Object的方法上,这样你就可以从你的javacript调用它。Sample: Calling WebMethods from javascriptSample: Calling HTTP Handlers from javascript
html
yrdbyhpb2#
你没有正确地看待问题。用户控件只有包含在WebForm中才能呈现。这个问题的正确解决方案是创建一个页面,其中只包含usercontrol,然后根据需要呈现/注入它。或者,您可以使用updatepanel,然后在服务器端以编程方式将用户控件添加到当前页(类似于updatepanel_load事件)。(实际上,看起来我的第二个解决方案不起作用-现在就去看看吧)下面是一个很好的例子:Link看起来诀窍是一个占位符和一个我不知道LoadControl()的函数。System.Web.UI.TemplateControl.LoadControl
PlaceHolder1.Controls.Clear(); UserControl uc = (UserControl)LoadControl(controlPath); PlaceHolder1.Controls.Add(uc);
2条答案
按热度按时间xeufq47z1#
不知道你是怎么做到的,因为你没有提供代码。也不知道为什么你会需要这样一个奇怪的东西:-)不是很常见,可能有一个替代的方法。您可以提供更多细节,以便我们可以建议更好的选择。
我认为你可以这样做,但是你需要像这样创建控件并调用渲染
在此之后,您必须将
html
变量附加到响应中。这段代码应该放在一个标记为WebMethod或HTTP Object的方法上,这样你就可以从你的javacript调用它。
Sample: Calling WebMethods from javascript
Sample: Calling HTTP Handlers from javascript
yrdbyhpb2#
你没有正确地看待问题。用户控件只有包含在WebForm中才能呈现。
这个问题的正确解决方案是创建一个页面,其中只包含usercontrol,然后根据需要呈现/注入它。
或者,您可以使用updatepanel,然后在服务器端以编程方式将用户控件添加到当前页(类似于updatepanel_load事件)。
(实际上,看起来我的第二个解决方案不起作用-现在就去看看吧)
下面是一个很好的例子:Link
看起来诀窍是一个占位符和一个我不知道LoadControl()的函数。System.Web.UI.TemplateControl.LoadControl