在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拆分如下

  1. 收割台部分
  2. 身体部位
    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.页脚部分
  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内容移动到某个位置(可能是文件或资源文件),并用属性替换占位符。有人能建议最好的方法吗?

在c#中创建动态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,这仍然是一项艰巨的工作。