ASP.NET - Load user control using AJAX?

非 Y 不嫁゛ 提交于 2019-12-10 16:47:46

问题


I'm not sure if what I'm trying to do is possible - pretty much I just want to call a user control using AJAX and get the rendered html of the control. However, when I try and fetch the control I get the following error message:

This type of page is not served.

Description: The type of page you have requested is not served because it has been explicitly forbidden. The extension '.ascx' may be incorrect. Please review the URL below and make sure that it is spelled correctly.

Requested URL: /Controls/ClientFormControl.ascx

Is it possible to make this type of page servable, or is there a specific way you need to call it? I know such things are easy in MVC frameworks...

Thanks in advance.


回答1:


You are not looking at the problem correctly. A usercontrol cannot be rendered unless it is contained in a WebForm.

The correct solution to this problem is to create a page with only the usercontrol contained on it and then render/inject it as required.

Alternatively you can use an updatepanel and then add the usercontrol to the current page programmatically on the server side (in something like the updatepanel_load event).

(actually it looks like my second solution doesnt work - checking it out now)

To follow up here is a great example: http://geekswithblogs.net/rashid/archive/2007/08/11/Loading-UserControl-Dynamically-in-UpdatePanel.aspx

Looks like the trick is a placeholder and a function i was unaware of LoadControl(). System.Web.UI.TemplateControl.LoadControl

PlaceHolder1.Controls.Clear();
UserControl uc = (UserControl)LoadControl(controlPath);
PlaceHolder1.Controls.Add(uc);



回答2:


Not sure how you're doing it since you provided no code. Also not sure why you would need such a weird thing :-) Not very common, probably there is an alternative approach. You may provide more details so we can suggest a better option if any.

I'd say you could do that but you need to create the control and call the render programatically like this

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

After this, you have to append the html variable to your response.

This code should be placed on a method marked as WebMethod or an HTTP Handler so you can call it from your javacript.

Sample: Calling WebMethods from javascript

Sample: Calling HTTP Handlers from javascript



来源:https://stackoverflow.com/questions/3071871/asp-net-load-user-control-using-ajax

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!