如何将asp:占位符的内容放入我可以应用xml转换的变量中?

时间:2013-07-04 08:17:03

标签: c# asp.net asp.net-placeholder

如何将asp:占位符的内容放入可以应用xml转换的变量中?

背景

我正在尝试自定义.NET Web应用程序的布局。它是一个企业产品,允许我在ascx文件中添加/删除内容块,并更改css属性。我无权访问任何CodeBehind文件(即.cs源代码),但如果我知道如何将这些文件添加到.ascx文件中,我可以编写自己的.cs文件。 但是,实际内容源自<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. 转换表格
  4. 提取结果<div id="loginBox"></div>并输出
  5. 我想我可以通过.ascx文件中的一些内联c#来实现这一点,比如

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

    虽然因为我相信任何c#代码都需要在 CodeBehind 文件中而失败,但是我失败了。如果我可以将表格变为变量,那么我可以按this example来应用变换。 我发现了一些类似的链接(见下文),但我认为这些链接需要访问Codebehind(即* .cs)文件

    1. asp:placeholder contents to string
    2. http://www.tomot.de/en-us/article/3/asp.net/create-a-control-in-the-codebehind-and-retrieve-its-rendered-output
    3. 问题

      如何将asp:占位符的内容放入一个可以应用xml转换的变量中?

      谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

你已经到了一半......你只需要让占位符渲染,然后隐藏结果,转换它,然后渲染你的转换。

将其放在页面上

<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