0

我正在尝试以可在视图中使用的流畅界面为 MVC 开发自己的可编辑数据网格。我的问题实际上是关于使用 lambdas,而不是关于数据网格,但上下文可能有助于理解我的问题。无论如何,我有一些看起来像这样的代码:

@model IEnumerable<AdamOneilSoftware.Models.Something>

@{
    var firstItem = Model.FirstOrDefault();
}
@(Html.DataGrid(Model)
    .CssClass("data")
    .TextBox(model => firstItem.Text)
    .TextBox(model => firstItem.Position)
    .Render())

这么多编译好。您可以看到我想使用 lambdas 来设置我的数据网格的列。我不明白的是如何在我的数据网格类中对这些 lambdas 做任何事情。我推测我需要编译/调用表达式,但我被困在调用部分。这是我所拥有的:

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 标签等)。

4

1 回答 1

2

您需要获取视图的Model实例以作为参数传递。

你可以在Html.ViewData.Model.

于 2013-08-26T18:18:14.827 回答