【问题标题】:HTML template for ASP controlsASP 控件的 HTML 模板
【发布时间】:2010-10-21 03:00:30
【问题描述】:

我正在编写一个应用程序,该应用程序要求我的客户可以以他们选择的任何方式来布局他们的输入表单。

我想使用一个带有占位符的 HTML 模板,然后在运行时用指定的 .NET 控件替换它们:

<table style="width: 100%;">
<tr>
    <td colspan="2">
        <fieldset title="Customers Template" >
            <table style="width:100%;">
                <tr>
                    <td width="140">
                        Policy Number:</td>
                    <td width="150">
                        $$Policy Number$$</td>
                    <td colspan="2" rowspan="3" valign="top">
                        Type 1:<br />
                        $$Type 1$$</td>
                    <td rowspan="3" valign="top">
                        Info:<br />
                        $$Info$$</td>
                    <td rowspan="3" valign="top">
                        Problems:<br />
                        $$Problems$$</td>
                </tr>...

所以我想在运行时查找并用各种 .NET 控件替换我的 $$xxx$$ 文本,具体取决于要添加的字段的数据类型。

对解决此问题的好方法有什么建议吗?

谢谢, 标记

【问题讨论】:

    标签: c# asp.net html dynamic


    【解决方案1】:

    &lt;asp:PlaceHolder&gt; 控件替换您的$$xxx$$ 块。

    在运行时你可以解析模板

    --- 在最简单的情况下,您可以要求模板是有效的 xhtml,然后您可以简单地使用 .NET XML API 来遍历 XmlDocument 的所有 ChildNode。从每个元素构建适当的 ASP.NET 服务器控件。

    对于更复杂(和完整的 HTML 解析器),请参阅 http://www.developer.com/net/csharp/article.php/2230091

    解析时,无论您在哪里看到 &lt;asp:PlaceHolder&gt; - 将其替换为定义模板的逻辑。

    教程:http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=752

    【讨论】:

    • HTML 模板由我的客户创建和提供、创建和控制,并在运行时动态加载。我认为动态加载文件时,asp占位符不会在控件集合中正确注册:-(
    • 取决于您如何实现动态“加载”文件 - 您可以解析模板并以编程方式构建 ASP.NET 控件。
    • 啊哈,这就是我所追求的 :-) 我已经知道如何以编程方式构建 ASP.NET 控件 - 但我将如何实际解析模板?
    【解决方案2】:

    如果您打算只用字符串替换这些占位符,请查看NVelocity template engineIn this answer,我只是展示了如何通过模板创建电子邮件。

    但是对于 asp.net 服务器控件,您可以将 html 模板拆分为块,然后将它们作为 LiteralControl 添加到您的页面中:

    Page.Controls.Add(new LiteralControl(@"<td width='140'>
                            Policy Number:</td>
                        <td width='150'>"));
    Page.Controls.Add(textBox1);
    Page.Controls.Add(new LiteralControl(@"</td><td colspan='2' rowspan='3' valign='top'>
                            Type 1:<br />"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多