Как я могу получить содержимое заполнителя 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>
Моя идея
- Обернуть
<table>
в<xml></xml>
теги - Преобразуйте таблицу с помощью xslt
- Извлечь полученный
<div id="loginBox"></div>
и вывести его
Я думаю, что я могу добиться этого с помощью некоторого встроенного C# в файле.ascx, как
<% string table = "<xml>" + <asp:PlaceHolder ID="TreeHead" runat="server"></asp:PlaceHolder> + "</xml>"; %>
Это терпит неудачу, хотя, как я полагаю, любой код C# должен быть в файле CodeBehind, поэтому я застрял. Если я могу получить таблицу в переменную, то я могу следовать этому примеру, чтобы применить преобразование. Я нашел пару ссылок (см. Ниже), которые делают что-то похожее, но я считаю, что они требуют доступа к файлам Codebehind (то есть *.cs)
- asp: заполнитель содержимого строки
- 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