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