Как сделать рендеринг asp: панели как div через .RenderConrol - PullRequest
1 голос
/ 22 июля 2010

tl: dr версия:

Есть ли способ сделать так, чтобы панели отображались в виде элементов div при визуализации с помощью 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, панели внутри этого элемента управления отображаются как элементы div. Однако когда я вызываю RenderControl в MyHeader, панели отображаются в виде таблиц, поэтому при обновлении страницы с помощью HeaderHtml макет разрушается.

Есть ли способ сделать так, чтобы панели отображались в виде элементов div при визуализации с помощью RenderControl?

Дополнительная информация:

Когда я впервые посмотрел на проблему, я подумал, что это может быть проблема с браузерными колпачками, но когда я посмотрел на web.config, я увидел, что у нас уже установлены браузерные колпачки для этого сайта: http://slingfive.com/pages/code/browserCaps/

Я думаю, что я мог бы обойти эту проблему, используя <div runat="server"> вместо панелей, и, в конце концов, это может быть лучшим решением, но на данный момент мне очень любопытно, есть ли способ заставить панель делать что я хочу это.

Ответы [ 2 ]

1 голос
/ 23 июля 2010

Прежде чем я увидел ответ Yellowfog, я попытался использовать серверные div вместо панелей. По иронии судьбы, я на самом деле использую класс, унаследованный от Panel, и он называется MyPanel: не уверен, зарабатывает ли Yellowfog экстрасенсорный или жуткий значок :). Основная причина, по которой я не хотел использовать этот подход, заключается в том, что я не писал класс MyPanel и не хотел иметь дело с какими-либо изменениями в нем, которые я мог бы сделать в результате наследования от HtmlGenericControl панели. Но переключатель был довольно безболезненным, и он работал отлично.

Прочитав ответ Йеллофога, я подумал, что я тоже подумаю над его предложением:

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 голос
/ 22 июля 2010

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

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