繁体   English   中英

编写HTML扩展名以接受Lambda表达式列表以访问属性

[英]Writing html extension that accept list of Lambda expressions for accessing Properties

我想编写一个生成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 + y)没有接触c#,并且我不完全了解我需要做什么。

在线演示

您可以使用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();
    }
}

错误恰恰说明了这一点。 您需要指定类型参数,因为它们不能被推断,例如:

HtmlHelpers.GenerateTable<Foo, Bar>(model => m.Id, model => m.Property1, model => m.Property2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM