Как я могу получить содержимое заполнителя asp: в переменную, к которой я могу применить преобразование xml?

Как я могу получить содержимое заполнителя asp: в переменную, к которой я могу применить преобразование xml?

Фон

Я пытаюсь настроить макет веб-приложения.NET. Это корпоративный продукт, который позволяет мне добавлять / удалять блоки содержимого в файлах ascx и изменять свойства css. У меня нет доступа ни к каким файлам CodeBehind (т.е. к исходному коду.cs), но я могу написать свои собственные.cs, если я знаю, как добавить их в файл.ascx. Тем не менее, фактическое содержание происходит от <asp:placeholders> поэтому мы создаем страницу, добавляя / удаляя звонки для местозаполнителей.

Общая цель состоит в том, чтобы заменить HTML-таблицы, которые генерируют заполнители, например, <div> так что приложение может быть отзывчивым.

пример

Пример использования заполнителя:

<asp:PlaceHolder ID="TreeHead" runat="server"></asp:PlaceHolder>

который генерирует вывод

<table id="loginBox" style="padding: 2px; margin: 0px;" cellpadding="2">
<tr>
    <td><label for="LM_1">Please enter your username</label></td>
    <td><input name="LM$1$" type="text" id="LM_1" /></td>
</tr>
<tr>
    <td><label for="LM_2">Please enter your password</label></td>
    <td><input name="LM$2$" type="password" id="LM_2"/></td>
</tr>
</table>

Я хочу преобразовать это во что-то вроде этого:

<div id="loginBox">
<div class="row">
    <div class="element"><label for="LM_1">Please enter your username</label>  </div>
    <div class="element"><input name="LM$1$" type="text" id="LM_1" />  </div>
</div>
<div class="row">
    <div class="element"> <label for="LM_2">Please enter your password</label>       
</div>
    <div class="element"> <input name="LM$2$" type="password" id="LM_2"/>  </div>
</div>

Моя идея

  1. Обернуть <table> в <xml></xml> теги
  2. Преобразуйте таблицу с помощью xslt
  3. Извлечь полученный <div id="loginBox"></div> и вывести его

Я думаю, что я могу добиться этого с помощью некоторого встроенного C# в файле.ascx, как

<% string table = "<xml>" + <asp:PlaceHolder ID="TreeHead" runat="server"></asp:PlaceHolder> + "</xml>"; %>

Это терпит неудачу, хотя, как я полагаю, любой код C# должен быть в файле CodeBehind, поэтому я застрял. Если я могу получить таблицу в переменную, то я могу следовать этому примеру, чтобы применить преобразование. Я нашел пару ссылок (см. Ниже), которые делают что-то похожее, но я считаю, что они требуют доступа к файлам Codebehind (то есть *.cs)

  1. asp: заполнитель содержимого строки
  2. http://www.tomot.de/en-us/article/3/asp.net/create-a-control-in-the-codebehind-and-retrieve-its-rendered-output

Вопрос

Как я могу получить содержимое заполнителя asp: в переменную, к которой я могу применить преобразование xml?

Спасибо за любую помощь.

1 ответ

Решение

Вы находитесь на полпути... вам нужно только разрешить визуализацию заполнителей, затем скрыть результаты, преобразовать их и визуализировать преобразование.

разместить это на странице

<asp:PlaceHolder ID="TreeHead" runat="server" /><%= FinalTable %>

и на код позади визуализации и преобразования вашего HTML

using (TextWriter stringWriter = new StringWriter())
{
    using (HtmlTextWriter RenderOnMe = new HtmlTextWriter(stringWriter))
    {
        // render the control
        TreeHead.RenderControl(RenderOnMe);

        // transfor here the stringWriter as you like    

        // now add it to the string
        FinalTable = "<xml>" + stringWriter.ToString() + "</xml>";
    }
}

// hide the control, and only render the FinalTable
TreeHead.Visible = false;

FinalTable это страница public string

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