Mar*_*ius 9 .net c# asp.net-mvc
我想创建一个HtmlHelper来创建一个html表.我希望帮助器能够获取任何类型的对象列表以及要显示为列的对象属性列表.像这样的东西:
public static HtmlString Table(this HtmlHelper helper, List<T> data, List<string> headers)
{
//Tags
TagBuilder table = new TagBuilder("table");
TagBuilder tr = new TagBuilder("tr");
TagBuilder td = new TagBuilder("td");
TagBuilder th = new TagBuilder("th");
//Inner html of table
StringBuilder sb = new StringBuilder();
//Add headers
foreach (var s in headers)
{
th.InnerHtml = s;
tr.InnerHtml += th.ToString();
}
sb.Append(tr.ToString());
//Add data
foreach (var d in data)
{
tr.InnerHtml = "";
foreach (var h in headers)
{
td.InnerHtml = d.h.ToString();
tr.InnerHtml += td.ToString();
}
sb.Append(tr.ToString());
}
table.InnerHtml = sb.ToString();
return new HtmlString(table.ToString());
}
Run Code Online (Sandbox Code Playgroud)
这段代码当然不行,但我想知道是否有可能做出类似的东西?我该怎么做呢.
编辑:
我选择了以下解决方案,其想法是表格应该只包含标题列表中指定的元素,所以这就是我想出的:
public static HtmlString Table<T>(this HtmlHelper helper, List<T> data, List<string> headers)
{
//Tags
TagBuilder table = new TagBuilder("table");
TagBuilder tr = new TagBuilder("tr");
TagBuilder td = new TagBuilder("td");
TagBuilder th = new TagBuilder("th");
//Inner html of table
StringBuilder sb = new StringBuilder();
//Add headers
foreach (var s in headers)
{
th.InnerHtml = s;
tr.InnerHtml += th.ToString();
}
sb.Append(tr.ToString());
//Add data
foreach (var d in data)
{
tr.InnerHtml = "";
foreach (var h in headers)
{
td.InnerHtml = d.GetType().GetProperty(h).GetValue(d, null).ToString();
tr.InnerHtml += td.ToString();
}
sb.Append(tr.ToString());
}
table.InnerHtml = sb.ToString();
return new HtmlString(table.ToString());
}
Run Code Online (Sandbox Code Playgroud)
Luk*_*ley 10
public HtmlTable BuildTable<T>(List<T> Data)
{
HtmlTable ht = new HtmlTable();
//Get the columns
HtmlTableRow htColumnsRow = new HtmlTableRow();
typeof(T).GetProperties().Select(prop =>
{
HtmlTableCell htCell = new HtmlTableCell();
htCell.InnerText = prop.Name;
return htCell;
}).ToList().ForEach(cell => htColumnsRow.Cells.Add(cell));
ht.Rows.Add(htColumnsRow);
//Get the remaining rows
Data.ForEach(delegate(T obj)
{
HtmlTableRow htRow = new HtmlTableRow();
obj.GetType().GetProperties().ToList().ForEach(delegate(PropertyInfo prop)
{
HtmlTableCell htCell = new HtmlTableCell();
htCell.InnerText = prop.GetValue(obj, null).ToString();
htRow.Cells.Add(htCell);
});
ht.Rows.Add(htRow);
});
return ht;
}
Run Code Online (Sandbox Code Playgroud)
试试吧.你需要打电话BuildTable<YourType>(list).
| 归档时间: |
|
| 查看次数: |
8701 次 |
| 最近记录: |