我正在编写一个应用程序,要求我的客户可以按照他们选择的方式布置他们的输入表单。
我想将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 $$文本。
有关如何处理此问题的好方法的任何建议?
谢谢, 标记
答案 0 :(得分:1)
用<asp:PlaceHolder>
控件替换$$ xxx $$块。
在运行时,您可以解析模板
---在最简单的情况下,您可以要求模板是有效的xhtml,然后您可以简单地使用.NET XML API迭代XmlDocument的所有ChildNodes。从每个元素构建适当的ASP.NET服务器控件。
对于更复杂(且完整的HTML解析器),请参阅http://www.developer.com/net/csharp/article.php/2230091
在您解析时,只要看到<asp:PlaceHolder>
,请将其替换为定义模板的逻辑。
教程:http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=752
答案 1 :(得分:0)
如果您要仅使用字符串替换这些占位符,请查看NVelocity template engine。 In 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 />"));