Bir html tablosu oluşturmak için bir HtmlHelper oluşturmak istiyorum. Yardımcıların herhangi bir nesne türünün bir listesini ve sütun olarak görüntülenecek nesnenin özelliklerinin bir listesini alabilmesini isterim. Böyle bir şey:Herhangi bir tür listeden html tablosu oluşturmak için kullanılan Genel HtmlHelper
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());
}
Bu kod elbette işe yaramıyor, ama benzer bir şey yapmanın mümkün olup olmayacağını merak ediyorum. Ve bunu nasıl yapacağım?
DÜZENLEME:
aşağıdaki çözümü seçti fikri i ile geldi tablo sadece başlıklar listesinde belirtilen unsurları içermelidir, bu da öyle oldu:
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());
}
Eğer "T", "public properties" aracılığıyla başlıkları eşleştirdiği "List Listenizde" olduğunu düşünürsek rahat edersiniz? –
LukeHennerley
Fikir, bir başlığın T.'nin bir kamu mülküne tekabül etmesidir. Bu yüzden cevabın evet olduğunu düşünüyorum. – Marius