我想编写一个生成HTML表的html扩展名
public static class HtmlHelpers
{
public static IHtmlString DisplayPropreties<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, params Expression<Func<TModel, TProperty>>[] expressions)
{
// some code here
}
}
问题是当我想从视图中调用该方法时:
@Html.DisplayPropreties(model => m.Id, model => m.Property1, model => m.Property2)
出现错误:
方法的类型参数 'HtmlHelpers.DisplayPropreties(HtmlHelper,params Expression> [])'不能用 当前用法。尝试明确指定类型参数
一段时间(3岁以上)我没有触摸c#,而且我不完全了解我需要做什么。
答案 0 :(得分:2)
然后您可以使用Json.Net
的Jsonconvert Serialize集合对象
然后将DeserializeObject集合保存到DataTable
调用ConvertDataTableToHTML方法从DataTable对象获取HtmlTable。
public static class HtmlHelpers
{
public static string ToHtmlTable(this HashSet<dynamic> obj)
{
return ToHtmlTableConverter(obj);
}
public static string ToHtmlTable(this ICollection obj) {
return ToHtmlTableConverter(obj);
}
public static string ToHtmlTable(this System.Data.DataTable obj)
{
return ConvertDataTableToHTML(obj);
}
private static string ToHtmlTableConverter( object obj )
{
var jsonStr = JsonConvert.SerializeObject(obj);
var data = JsonConvert.DeserializeObject<System.Data.DataTable>(jsonStr);
var html = ConvertDataTableToHTML(data);
return html;
}
private static string ConvertDataTableToHTML(System.Data.DataTable dt)
{
var html = new StringBuilder("<table>");
//header
html.Append("<thead><tr>");
for (int i = 0; i < dt.Columns.Count; i++)
html.Append("<th>" + dt.Columns[i].ColumnName + "</th>");
html.Append("</tr></thead>");
//body
html.Append("<tbody>");
for (int i = 0; i < dt.Rows.Count; i++)
{
html.Append("<tr>");
for (int j = 0; j < dt.Columns.Count; j++)
html.Append("<td>" + dt.Rows[i][j].ToString() + "</td>");
html.Append( "</tr>");
}
html.Append("</tbody>");
html.Append("</table>");
return html.ToString();
}
}
答案 1 :(得分:1)
这正是错误所言。您需要指定类型参数,因为无法推断出它们,例如:
HtmlHelpers.GenerateTable<Foo, Bar>(model => m.Id, model => m.Property1, model => m.Property2);