Как заставить asp:panel представить как отделение через.RenderConrol

версия tl:dr:

Существует ли способ заставить панели представлять как отделения при рендеринге 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/

Я думаю, что мог обойти эту проблему при помощи

вместо панелей, и в конце это могло бы быть лучшим решением, но в этой точке мне очень любопытно, если существует способ заставить панель делать то, к чему я хочу это.

1
задан BenWillkommen 22 July 2010 в 15:09
поделиться

2 ответа

Прежде чем я увидел ответ 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
}

Это тоже отлично работает.

1
ответ дан 2 September 2019 в 22:50
поделиться

Что я обычно делаю, так это создаю класс, который наследуется от Panel (MyPanel, скажем), использую его вместо Panel и переопределяю метод Render в MyPanel, чтобы сделать то, что я хочу.

1
ответ дан 2 September 2019 в 22:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: