我正在开发一个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>
一起使用的类,那么为什么我需要再次定义?编译器应该从签名本身知道吗?
答案 0 :(得分:1)
您需要在方法Columns<TM>()
中定义泛型,您可能希望用DataTableColumn<something>
或DataTableColumn<PersonModel>
替换TM泛型:
Html.MyControls()
.MyGrid<PersonModel>()
.Columns<DataTableColumn<PersonModel>>(column =>
{
column.Column(w => w.Name);
})