首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过jQuery加载ascx

通过jQuery加载ascx
EN

Stack Overflow用户
提问于 2011-01-04 18:36:58
回答 3查看 10.9K关注 0票数 8

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

更新

感谢“Emmett”和“Yads”我使用的处理程序有以下jQuery ajax代码:

代码语言:javascript
复制
 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');
    }
 });

但我犯了个错误。我的代码错了吗?

另一个更新:我正在使用

代码语言:javascript
复制
error: function (xhr, ajaxOptions, thrownError)
{
    jQuery('#controlload').append(thrownError);
}

我得到的是:

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

和我的ascx文件后出错!

另一个更新

我的ascx文件是这样的:

代码语言:javascript
复制
<asp:DropDownList ID="ddl" runat="server" AutoPostBack="true">
    <asp:ListItem>1</asp:ListItem>
    <asp:ListItem>2</asp:ListItem>
</asp:DropDownList>
<asp:Label ID="Label1" runat="server">Test</asp:Label>

但是在调用ajax时,我在asp::(

类型为“ctl00_ddl”的控件'DropDownList‘必须放在带有runat=server的窗体标记中。

多亏了@Yads。但他的解决方案只适用于html标记。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-04 19:05:49

以Emmett的解决方案为基础

代码语言:javascript
复制
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请求

代码语言:javascript
复制
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');
    }
 });
票数 13
EN

Stack Overflow用户

发布于 2011-01-04 18:47:01

代码语言:javascript
复制
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();
}
票数 3
EN

Stack Overflow用户

发布于 2011-01-04 18:43:25

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

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

编辑

根据你的意见,我有另一个建议:

如果您正在开发一个CMS风格的应用程序,您应该构建您的*.ascx控件,使它们成为兼容ASP.NET AJAX工具包。这将允许用户在不执行完全刷新的情况下向页面添加内容。

如果您真的想为用户提供更好的服务,您应该查看Web部件和ASP.NET AJAX,因为Web部件是真正设计的,这样用户就可以自定义页面上的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4597103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档