使用lambda for MVC helper传递列表时出现问题

时间:2017-02-03 20:52:51

标签: c# asp.net-mvc asp.net-mvc-4 lambda

我正在开发一个MVC助手,我想在其中处理Model的每个属性。

我创建了以下课程:

public class DataTableHtmlString<T> : HtmlString
    where T : class
{
    public DataTableHtmlString(string value) :
        base(value)
    {
    }

    public DataTableHtmlString<T> Columns<TM>(Expression<Func<TM, T>> columns)
        where TM : DataTableColumn<T>
    {
        return this;
    }
}

我的datacolumn类看起来像这样:

public class DataTableColumn<T>
    {
        internal string ColumnTitle { get; set; }

        public void Column(Expression<Action<T>> column)
        {

        }
    }

当我用来调用我的帮助方法时:

@(Html.MyControls()
                .MyGrid<PersonModel>()
                .Columns(column =>
                {
                    column.Column(w => w.Name);
                })
)

它将.Columns方法的错误视为: &#34; 方法的类型参数&#39; DataTableHtmlString.Columns(Expression&gt;)&#39;无法从使用中推断出来。尝试明确指定类型参数。&#34;

更新

我添加了Columns<DataTableColumn<Jquery.DataTable.MVC5.Demo.Models.PersonModel>>并且它正在工作但是我已经提到过Columns方法,TM是DataTableColumn而T是可以与MyGrid<PersonModel>一起使用的类,那么为什么我需要再次定义?编译器应该从签名本身知道吗?

1 个答案:

答案 0 :(得分:1)

您需要在方法Columns<TM>()中定义泛型,您可能希望用DataTableColumn<something>DataTableColumn<PersonModel>替换TM泛型:

Html.MyControls()
    .MyGrid<PersonModel>()
    .Columns<DataTableColumn<PersonModel>>(column =>
    {
        column.Column(w => w.Name);
    })