Загрузите ascx через jQuery - PullRequest
       15

Загрузите ascx через jQuery

7 голосов
/ 04 января 2011

Есть ли способ загрузить файл ascx с помощью jQuery?

UPDATE

благодаря @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 выглядит примерно так:

<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-тегом.

Ответы [ 3 ]

12 голосов
/ 04 января 2011

Построение решения Эммета

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');
    }
 });
4 голосов
/ 04 января 2011
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();
}
1 голос
/ 04 января 2011

*. Ascx-файлы отображаются на стороне сервера (внутри страницы * .aspx), а не на стороне клиента (где выполняется JavaScript).

Одним из вариантов может быть создание пустого * .aspx, размещение пользовательского элемента управления на странице * .aspx, а затем получение этой страницы через jQuery и вывод результата на страницу.

Редактировать

На основании вашего комментария у меня есть еще одно предложение:

Если вы разрабатываете приложение в стиле CMS, вы должны создать элементы управления * .ascx, чтобы они были совместимы с ASP.NET AJAX Toolkit . Это позволит пользователям добавлять контент на страницу без полного обновления.

Если вы действительно хотите сделать что-то приятное для пользователя, вы должны проверить Веб-части и ASP.NET AJAX , поскольку веб-части действительно были разработаны таким образом, чтобы пользователи могли настраивать контент на своих страницах. 1017 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...