Существует ли способ заставить панели представлять как отделения при рендеринге RenderControl?
Я работаю над asp.net 1,1 сайта, и я пытаюсь представить управление, содержащее панели к строке, таким образом, я могу пасовать назад их к странице как JSON и обновить часть страницы.
Я представляю управление таким образом:
StringWriter twHeader = new StringWriter();
Html32TextWriter HeaderWriter = new Html32TextWriter(twHeader);
MyHeader.RenderControl(HeaderWriter);
HeaderWriter.Close();
string HeaderHtml = twHeader.ToString()
При навигации к странице, содержащей управление MyHeader, панели в рамках того управления представляются как отделения. Однако, когда я называю RenderControl на MyHeader, панели представляются как таблицы, поэтому когда страница обновляется с HeaderHtml, расположение аварийно завершается.
Существует ли способ заставить панели представлять как отделения при рендеринге RenderControl?
Когда я сначала изучил проблему, я думал, что это могла бы быть проблема browsercaps, но когда я посмотрел на web.config, я видел, что у нас уже есть набор browsercaps согласно этому сайту: http://slingfive.com/pages/code/browserCaps/
Я думаю, что мог обойти эту проблему при помощи
Прежде чем я увидел ответ Yellowfog, я пошел вперед и попробовал использовать div на стороне сервера вместо панелей. По иронии судьбы, я на самом деле использую класс, который наследуется от Panel, и он называется MyPanel: не уверен, заработает ли это Yellowfog значок экстрасенса или значок жути :) . Основная причина, по которой я не хотел использовать этот подход, заключается в том, что я не писал класс MyPanel и не хотел иметь дело с любыми изменениями в нем, которые я мог бы сделать в результате наследования от HtmlGenericControl вместо Panel. Но переход оказался довольно безболезненным, и все работает отлично.
Прочитав ответ Yellowfog, я решил попробовать и его предложение:
public class MyPanel : Panel
{
//snip
protected override void Render(HtmlTextWriter output)
{
output.Write("<div id=\"{0}\" class=\"{1}\"", this.ID, this.CssClass);
this.RenderChildren(output);
output.Write("</div>");
}
//snip
}
Это тоже отлично работает.
Что я обычно делаю, так это создаю класс, который наследуется от Panel (MyPanel, скажем), использую его вместо Panel и переопределяю метод Render в MyPanel, чтобы сделать то, что я хочу.