生成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=\"width:{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 = "", HeaderName = "Id" },
new TableHeader { Width = "", HeaderName = "CustomerGuid" },
new TableHeader { Width = "", HeaderName = "Username" },
new TableHeader { Width = "", HeaderName = "Email" },
new TableHeader { Width = "", HeaderName = "Password" },
new TableHeader { Width = "", HeaderName = "PasswordSalt" },
new TableHeader { Width = "", HeaderName = "Active" },
new TableHeader { Width = "", HeaderName = "Deleted" },
new TableHeader { Width = "", HeaderName = "LastIpAddress" },
new TableHeader { Width = "", 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="width:10px;">Id</th>
<th style="width:20px;">CustomerGuid</th>
<th style="width:30px;">Username</th>
<th style="width:40px;">Email</th>
<th style="width:50px;">Password</th>
<th style="width:60px;">PasswordSalt</th>
<th style="width:70px;">Active</th>
<th style="width:80px;">Deleted</th>
<th style="width:90px;">LastIpAddress</th>
<th style="width:100px;">CreatedOn</th>
</tr>
<tr class="success">
<td></td>
<td>bee62ba2-9d53-495f-80d4-af4fe6ddaa16</td>
<td>Allen</td>
<td>@qq.com</td>
<td>0D59DB9C0211A16786F5EFD6B5809B6984B2AF96</td>
<td>TW0lAH4=</td>
<td>True</td>
<td>False</td>
<td>127.0.0.1</td>
<td>--</td>
</tr>
</tbody>
</table>
这里我用了bootstrap作为表格的样式,你们可自定义class。
--鱼头鱼尾
--QQ:875755898
生成HTML表格的后台模板代码的更多相关文章
- Swagger结合mustache模板生成后台接口代码、以及前后台建模代码
之前项目中使用的的thrift来建模,维护前后台模型以及rest接口,前台使用的是angular2: 但是使用thrift只能生成建模,后台的rest接口的Controller文件还是需要手动去写,一 ...
- [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码
前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...
- 用Case类生成模板代码
将类定义为case类会生成许多模板代码,好处在于: ①会生成一个apply方法,这样就可以不用new关键字创建新的实例. ②由于case类的构造函数参数默认是val,那么构造函数参数会自动生成访问方法 ...
- Android Studio 配置快速生成模板代码
前言 Android studio 有提供快速生成模板代码的功能,其实这个功能也可以自定义配置.此篇博客将讲解如何使用此功能 进入Settings 选择 Editor > Live Templa ...
- Vue2.0 + ElementUI 手写权限管理系统后台模板(一)——简述
挤一下: 一开始以为没有多少人用就没建群,但是加我的人太多了,好多问题都是重复的,所以建个群大家互相沟通交流方便点,但是建的有点晚,错过了好多人所以群里人有点少,QQ群: 157216616 小提示 ...
- Yii2的相关学习记录,后台模板和gii(三)
前面已经可以正常登录,但我们需要体验下最常用的增删查改的操作.这里就需要gii,通过gii可以方便的生成表单.表格的框架,不需要我们再写重复的东西. gii访问地址:http://localhost/ ...
- 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码
在前面随笔<基于Metronic的Bootstrap开发框架--工作流模块功能介绍>和<基于Metronic的Bootstrap开发框架--工作流模块功能介绍(2)>中介绍了B ...
- C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点
C#反射实现 一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...
- python 全栈开发,Day58(bootstrap组件,bootstrap JavaScript 插件,后台模板,图表插件,jQuery插件库,Animate.css,swiper,运行vue项目)
一.bootstrap组件 无数可复用的组件,包括字体图标.下拉菜单.导航.警告框.弹出框等更多功能. 组件和插件的区别? 插件:一个功能,比如js文件 组件:html css js 组件包含插件 面 ...
随机推荐
- JDK and JRE File Structure JAVA_HOME HotSpot优化技术
https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jdkfiles.html Java Platform, Standard ...
- redis03----link 链表操作
link 链表结构 之前是操作字符串string 链表:头元素,后面一个一个的指向后面的元素.Redis内部实现了链表的结构.链表的头尾,从一个元素找到另外的元素. 链表的名字也是一个key. flu ...
- Spark基本原理
仅作<Spark快速大数据分析>学习笔记 定义:Spark是一个用来实现 快速 而 通用 的集群计算平台:(通用的大数据处理引擎:) 改进了原Hadoop MapReduce处理模型,体现 ...
- Delphi通过POST传递参数给PHP
Delphi代码 ******************************************************************************************* ...
- codeforces 443 B. Kolya and Tandem Repeat 解题报告
题目链接:http://codeforces.com/contest/443/problem/B 题目意思:给出一个只有小写字母的字符串s(假设长度为len),在其后可以添加 k 个长度的字符,形成一 ...
- https证书/即SSL数字证书申请途径和流程
国际CA机构GlobalSign中国 数字证书颁发中心网站:http://cn.globalsign.com https证书即SSL数字证书,是广泛用 于网站通讯加密传输的解决方案,是提供通信保 ...
- codeforces 724C
在一个nxm的镜面二维空间内,向(1,1)发射一条射线,来回反射,当遇到四个角之一时光线消失. 给K个点,问K个点第一次被射中是什么时候(v = sqrt(2)) 解:注意到只有 2*(n+m)个对角 ...
- 2.28 MapReduce在实际应用中常见的优化
一.优化的点 Reduce Task Number Map Task输出压缩 Shuffle Phase 参数 map.reduce分配的虚拟CPU 二.Reduce Task Number Redu ...
- 038--HTML
一.HTML的定义 1. 超文本标记语言(Hypertext Markup Language,HTML)通过标签语言来标记要显示的网页中的各个部分.一套规则,浏览器认识的规则 2. 浏览器按顺序渲染网 ...
- 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时10
课时10 神经网络训练细节part1(上) 没有大量的数据也不会有太多影响,只需要找一个经过预训练的卷积神经网络然后进行调整 从数据集中抽样一小批数据, 将数据运入卷积神经网络中来计算损失值 通过反向 ...