在c#中创建动态html的最佳方式
本文关键字:最佳 方式 html 动态 创建 | 更新日期: 2023-09-27 18:23:58
我正在从c#应用程序生成动态HTML,通过使用字符串生成器附加HTML标记,并最终形成完整的HTML。在所有的字符串生成器中,我将用c#对象替换html占位符。
正在构建的html是一个复杂的html,我需要从c#属性填充占位符,有时还需要数据库调用。我没有XML,所以不使用XSLT。由于我的html文件庞大,需要大量的字符串内置程序。大多数部分都是基于业务逻辑重复的。
现在一切都很好,我想从stringbuilder中删除硬编码的html字符串,因为以后维护会很困难。任何从控制台应用程序中删除硬代码html的最佳建议。
就性能而言,使用大量的字符串生成器(至少使用500个字符串生成器)好吗例如,我的html拆分如下
- 收割台部分
- 身体部位
2.1第1节
2.1.1第1.1节
2.1.2第1.2节
2.1.3第1.3节
2.2第2节
2.3第3节
2.4第4节
2.5第5节
3.页脚部分 - Temrs和条件
我刚刚在这里提供了几行代码供您参考。
代码示例:
htmlStringBuilder.Append("<table class='"paddingIndendation'" style='"width: 100%;'" border='"1'">");
htmlStringBuilder.Append(string.Format("<tr><td>Location {0}</td><td>:</td><td>{1}</td></tr>", location.LocationNumber, location.AddressLine1));
htmlStringBuilder.Append(string.Format("<tr><td colspan='"2'" style='"text-align:right;'"></td><td>{0}</td></tr>", location.AddressLine2));
htmlStringBuilder.Append(string.Format("<tr><td colspan='"2'" style='"text-align:right;'"></td><td>{0} {1}</td></tr>", location.PostalCode, location.City));
htmlStringBuilder.Append(string.Format("<tr><td colspan='"2'" style='"text-align:right;'"></td><td>{0} {1}</td></tr>", this.Id,this.StartEffectiveDate));
我想将硬编码的html内容移动到某个位置(可能是文件或资源文件),并用属性替换占位符。有人能建议最好的方法吗?
如果您查看Maintenance预览,您实际上可以制作一个带有占位符的HTML文件,如
<table class="paddingIndendation" style="width: 100%;" border="1">
<tr>
<td>Location ~LocationNumber~</td>
<td>:</td>
<td>~AddressLine1~</td>
</tr>
<tr>
<td colspan="2" style="text-align:right;"></td>
<td>~AddressLine2~</td>
</tr>
<tr>
<td colspan="2" style="text-align:right;"></td>
<td>~PostalCode~ ~City~</td>
</tr>
将字符串加载到类似的字符串变量中
string htmlstring = File.ReadAllText("yourhtml.txt");
然后,您可能可以创建一个小函数,用类似的任何属性或数据库调用来替换所有这些占位符
htmlstring = htmlstring.Replace("~LocationNumber~",location.LocationNumber);
htmlstring = htmlstring.Replace("~AddressLine1~",location.AddressLine1);
htmlstring = htmlstring.Replace("~AddressLine2~",location.AddressLine2);
htmlstring = htmlstring.Replace("~PostalCode~",location.PostalCode);
htmlstring = htmlstring.Replace("~City~",location.City);
我不知道为什么这个问题被否决了。
评论者是对的;无论它是否表现良好,你都会在做这件事时遇到很多麻烦。所以StringBuilder
确实是错误的做法。如果你无论如何都要做,那么它是否表现良好并不重要。你会放弃更好的方法来做这件事,而选择保持足够简单的方式来维持。性能将是任何性能。
如果我是你的话,我会做的是,使用ASP.NET(如果你愿意的话,MVC)创建一个本地的私人网站,然后使用脚本检索或抓取你的网站,删除所有生成的HTML,这仍然是一项艰巨的工作。