Преобразовать таблицу в HTML в ASP.NET (C#)?

У меня есть объект Table, который я создал и заполнил в своем коде. Это должно было быть сделано по разным причинам.

Я вызываю WebMethod через AJAX со стороны клиента, чтобы отправить переменную из выпадающего списка, а затем таблица заполняется статическим методом в коде. Мне нужно получить таблицу в ASP.Net PlaceHolder. Я не могу вызвать PlaceHolder из статического метода.

1 ответ

Решение

Вместо использования ASP.NET AJAX Page Method для возврата данных из вашего клиентского вызова AJAX, попробуйте использовать ASP.NET HTTP Handler, поскольку он позволит вам лучше контролировать содержимое, возвращающееся через заголовки HTTP, вместо того, чтобы закодировать результат вызова метода ASP.NET AJAX Page, например:

public class GetHtmlHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        // Grab the drop down list variable value from the query string

        // Use controls to build table or do it via StringWriter

        // Create a table row with three cells in it
        TableRow theTableRow = new TableRow();
        for (int theCellNumber = 0; theCellNumber < 3; theCellNumber++)
        {
            TableCell theTableCell = new TableCell();
            tempCell.Text = String.Format("({0})", theCellNumber);
            theTableRow.Cells.Add(theTableCell);
        }

        // Create writers to render contents of controls into
        StringWriter theStringWriter = new StringWriter();
        HtmlTextWriter theHtmlTextWriter = new HtmlTextWriter(theStringWriter);

        // Render the table row control into the writer
        theTableRow.RenderControl(theHtmlTextWriter);

        // Return the string via the StringWriter
        context.Response.Write(theStringWriter.ToString());
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

Теперь на стороне клиента, используйте jQuery .ajax() функция для вызова обработчика HTTP, например так:

$(document).ready(function() {
    $.ajax({
        type: "POST",
        url: "PATH_TO_HANDLERS/GetHtmlHandler.ashx?id=YOUR_DROP_DOWN_VALUE",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(result) {
            // Select the placeholder control by class here and put HTML into it
            $('.ThePlaceHolder').html(result);
        }
    });
}); 

Примечание. Приведенный выше селектор требует добавления CssClass приписать к вашему PlaceHolder управление, как это:

<asp:PlaceHolder id="PlaceHolder1" runat="server" CssClass="ThePlaceHolder" />

ОБНОВИТЬ:

Вместо использования class имя в вашем селекторе jQuery, вы можете использовать ID из PlaceHolderЯ изначально советовал против этого, потому что он подвержен искажениям имени при использовании главных страниц в ASP.NET. Во всяком случае, есть ClientIDMode атрибут, который вы можете использовать, например:

<asp:PlaceHolder id="PlaceHolder1" runat="server" ClientIDMode="Static" />

Теперь ваш селектор jQuery будет выглядеть так:

// Select the placeholder control by ID here and put HTML into it
$('#<%= PlaceHolder1.ClientID %>').html(result);

Примечание: я предпочитаю избегать угловых скобок (<%= %>) обозначение, где это возможно.

Другие вопросы по тегам