zoukankan      html  css  js  c++  java
  • 生成HTML表格的后台模板代码

    有时候,我们需要在后台拼接生成前端的html表格,一般的做法就是各种string、StringBuilder的拼接(例子省略...),这样的话如果表头不同就没法做到代码的重用,增加代码的冗余,下面我分享我的做法,以达到各位大牛抛砖引玉的效果。

    首先新建一个公共配置静态类CommonConfiguration:

     public static class CommonConfiguration
        {
            public static string Width { get { return "Width"; } }
    
            public static string HeaderName { get { return "HeaderName"; } }
    
            /// <summary>
            /// 定义表格单元
            /// </summary>
            public static string TableTdBody { get { return "<td>{0}</td>"; } }
        }

    接着定义一个公共帮助类:

    public class CommonHelper
        {
            private const string FormatString = "<table style="{0}" class="{1}">";
            private const string FormatTableHeader = "<th style="{0}px;">{1}</th>"; // 定义表头字符串
    
            /// <summary>
            /// 生成前端table模板
            /// </summary>
            /// <typeparam name="T">表头实体</typeparam>
            /// <param name="style">样式</param>
            /// <param name="className">类名</param>
            /// <param name="bodyString">表身</param>
            /// <param name="tableHeader">表头实体数据</param>
            /// <returns>Table模板</returns>
            public static string HtmlResult<T>(string style, string className, string bodyString,
                List<T> tableHeader) where T : class
            {
                var builder = new StringBuilder();
    
                builder.AppendFormat(FormatString, style, className);
    
                builder.Append("<tr>");
                foreach (var item in tableHeader)
                {
                    builder.AppendFormat(FormatTableHeader, GetPropertyValue(item, CommonConfiguration.Width),
                        GetPropertyValue(item, CommonConfiguration.HeaderName));
                }
                builder.Append("</tr>");
                builder.Append(bodyString);
    
                builder.Append("</table>");
    
                return builder.ToString();
            }
    
            /// <summary>
            /// 根据属性名取得值
            /// </summary>
            /// <param name="entity">泛型实体</param>
            /// <param name="propertyName">属性名</param>
            /// <returns>对应属性值</returns>
            public static string GetPropertyValue<T>(T entity, string propertyName) where T : class
            {
                var type = entity.GetType();
                var propertyInfo = type.GetProperty(propertyName);
                var value = (string)propertyInfo.GetValue(entity);
                return value;
            }
        }
    
        public class TableHeader
        {
            /// <summary>
            /// 表头宽度
            /// </summary>
            public string Width { get; set; }
            /// <summary>
            /// 表头名
            /// </summary>
            public string HeaderName { get; set; }
        }

    类TableHeader可定义自己喜欢的位置,我定义在这里是为了方便,代码很清晰,相信很容易看懂。

    最后新建一个控制器HomeController用于调用这些代码生成html表格:

    public ActionResult Index()
            {
                string tableBody = CommonConfiguration.TableTdBody;
                StringBuilder sb = new StringBuilder();
    
    
                var tableList = new List<TableHeader>
                {
                    new TableHeader { Width = "10", HeaderName = "Id" },
                    new TableHeader { Width = "20", HeaderName = "CustomerGuid" },
                    new TableHeader { Width = "30", HeaderName = "Username" },
                    new TableHeader { Width = "40", HeaderName = "Email" },
                    new TableHeader { Width = "50", HeaderName = "Password" },
                    new TableHeader { Width = "60", HeaderName = "PasswordSalt" },
                    new TableHeader { Width = "70", HeaderName = "Active" },
                    new TableHeader { Width = "80", HeaderName = "Deleted" },
                    new TableHeader { Width = "90", HeaderName = "LastIpAddress" },
                    new TableHeader { Width = "100", HeaderName = "CreatedOn" },
                };
    
                var customers = _customerService.GetCustomers().ToArray();
    
                customers.ForEach(c =>
                {
                    sb.AppendFormat("<tr class="{0}">", c.Active ? "success" : "warning");
                    sb.AppendFormat(tableBody, c.Id);
                    sb.AppendFormat(tableBody, c.CustomerGuid);
                    sb.AppendFormat(tableBody, c.Username);
                    sb.AppendFormat(tableBody, c.Email);
                    sb.AppendFormat(tableBody, c.Password);
                    sb.AppendFormat(tableBody, c.PasswordSalt);
                    sb.AppendFormat(tableBody, c.Active);
                    sb.AppendFormat(tableBody, c.Deleted);
                    sb.AppendFormat(tableBody, c.LastIpAddress);
                    sb.AppendFormat(tableBody, c.CreatedOn.ToString("yyyy-MM-dd"));
                    sb.Append("</tr>");
                });
    
                var htmlResult = CommonHelper.HtmlResult("border-color: solid 1px #008000", "table table-striped", sb.ToString(), tableList);
    
                ViewBag.Result = MvcHtmlString.Create(htmlResult);
    
                return View();
            }

    视图页:

    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    <div class="container">
        @ViewBag.Result
    </div>

    最后查看生成的html格式效果:

      <table style="border-color: solid 1px #008000" class="table table-striped">
       <tbody>
        <tr>
         <th style="10px;">Id</th>
         <th style="20px;">CustomerGuid</th>
         <th style="30px;">Username</th>
         <th style="40px;">Email</th>
         <th style="50px;">Password</th>
         <th style="60px;">PasswordSalt</th>
         <th style="70px;">Active</th>
         <th style="80px;">Deleted</th>
         <th style="90px;">LastIpAddress</th>
         <th style="100px;">CreatedOn</th>
        </tr>
        <tr class="success">
         <td>1</td>
         <td>bee62ba2-9d53-495f-80d4-af4fe6ddaa16</td>
         <td>Allen</td>
         <td>875755898@qq.com</td>
         <td>0D59DB9C0211A16786F5EFD6B5809B6984B2AF96</td>
         <td>TW0lAH4=</td>
         <td>True</td>
         <td>False</td>
         <td>127.0.0.1</td>
         <td>2016-06-18</td>
        </tr>
       </tbody>
      </table>

    这里我用了bootstrap作为表格的样式,你们可自定义class。

    --鱼头鱼尾

    --QQ:875755898

  • 相关阅读:
    spring 事物(一)—— 事物详解
    XMPP即时通讯协议使用(十一)——Openfire表结构汇总
    java 关键字汇总
    基于数据库的分布式锁实现
    hibernate 参数一览
    数据库并发及锁机制及Hibernate锁实现
    redis 分布式锁的正确实现方式
    支持跨域的html元素
    九度OJ 上剑指 offer 习题目录
    Leetcode: Palindrome Partition I II
  • 原文地址:https://www.cnblogs.com/YUTOUYUWEI/p/5734790.html
Copyright © 2011-2022 走看看