问题
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