通过jQuery加载ascx

有没有办法通过jQuery加载ascx文件?

更新

感谢@Emmett和@Yads。 我正在使用带有以下jQuery ajax代码的处理程序:

jQuery.ajax({ type: "POST", //GET url: "Foo.ashx", data: '{}', contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { jQuery('#controlload').append(response.d); // or response }, error: function () { jQuery('#controlload').append('error'); } }); 

但是我收到了一个错误。 我的代码错了吗?

另一个更新 :我正在使用

 error: function (xhr, ajaxOptions, thrownError) { jQuery('#controlload').append(thrownError); } 

这就是我得到的:

无效的JSON:
Test =>(此测试是我的ascx中的标签)

和错误后的我的ascx文件!

另一个更新

我的ascx文件是这样的:

  1 2  Test 

但是当调用ajax我在asp中得到这个错误:(

必须将带有’DropDownList’类型的控件’ctl00_ddl’放在带有runat = server的表单标记内。

感谢@Yads。 但他的解决方案只适用于html标签。

建立艾美特的解决方案

 public class FooHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; context.Response.Write(RenderPartialToString("Foo.ascx")); } private string RenderPartialToString(string controlName) { Page page = new Page(); Control control = page.LoadControl(controlName); page.Controls.Add(control); StringWriter writer = new StringWriter(); HttpContext.Current.Server.Execute(page, writer, false); return writer.ToString(); } public bool IsReusable { get { return false; } } } 

使用以下jquery请求

 jQuery.ajax({ type: "POST", //GET url: "Foo.ashx", dataType: "html", success: function (response) { jQuery('#controlload').append(response); // or response }, error: function () { jQuery('#controlload').append('error'); } }); 
 public ActionResult Foo() { return new ContentResult { Content = RenderPartialToString("Foo.ascx", null), ContentType = "text/html" }; } //http://www.klopfenstein.net/lorenz.aspx/render-partial-view-to-string-asp-net-mvc-benchmark public static string RenderPartialToString(string controlName, ViewDataDictionary viewData) { ViewPage vp = new ViewPage(); vp.ViewData = viewData; Control control = vp.LoadControl(controlName); vp.Controls.Add(control); StringBuilder sb = new StringBuilder(); using (StringWriter sw = new StringWriter(sb)) { using (HtmlTextWriter tw = new HtmlTextWriter(sw)) { vp.RenderControl(tw); } } return sb.ToString(); } 

* .ascx文件在服务器端(* .aspx页面内)呈现,而不是客户端(执行JavaScript)。

一个选项可能是创建一个空白* .aspx,将用户控件放在* .aspx页面上,然后通过jQuery获取该页面并将结果转储到页面上。

编辑

根据您的评论,我有另一个建议:

如果您正在开发CMS样式应用程序,则应构建* .ascx控件,以便它们与ASP.NET AJAX Toolkit兼容 。 这将允许用户在不进行完全刷新的情况下向页面添加内容。

如果你真的想为用户做好事,那么你应该检查Web部件和ASP.NET AJAX,因为Web部件的设计是为了让用户可以自定义页面上的内容。