我正在尝试使用View中可用的流畅界面为MVC开发自己的可编辑数据网格。我的问题实际上是关于使用lambda,而不是数据网格,但上下文可能有助于理解我的问题。无论如何,我有一些看起来像这样的代码:
@model IEnumerable<AdamOneilSoftware.Models.Something>
@{
var firstItem = Model.FirstOrDefault();
}
@(Html.DataGrid(Model)
.CssClass("data")
.TextBox(model => firstItem.Text)
.TextBox(model => firstItem.Position)
.Render())
这个编译好了。您可以看到我想使用lambdas来设置数据网格的列。我不明白的是如何在我的数据网格类中对这些lambda做任何事情。我猜测我需要编译/调用表达式,但我仍然坚持使用Invoke部分。这就是我所拥有的:
public DataGridBuilder<TModel> TextBox<TValue>(Expression<Func<TModel, TValue>> expression)
{
var del = expression.Compile();
// invoke the delegate?
var result = del.Invoke(); // but this expects a TModel argument
return this;
}
Invoke调用需要一个TModel参数(根据Func声明 - 我理解)。但这不起作用 - 这是正确的:
var result = del.Invoke(TModel);
如何在Invoke调用中形成TModel参数?还是我完全朝着错误的方向前进?目标是执行类似DisplayFor和EditorFor方法的操作 - 渲染一些HTML,同时了解目标属性的元数据(DataFormatString,Display标签等)。
答案 0 :(得分:2)
您需要将视图的Model
实例作为参数传递。
您可以在Html.ViewData.Model
。