我似乎无法在 MVC Webgrid 的源代码中将以下代码拼凑在一起。
当我们构建网格列时,我们会说
grid.Column("Id", format: (item) => item.GetSelectLink(item.Id)),
“item”显然是一个 lambda 参数,它实际上是一个“WebGridRow”类。(我认为!!除非我错了)在这里查看源代码
https://github.com/mono/aspnetwebstack/blob/master/src/System.Web.Helpers/WebGrid/WebGridRow.cs
我的问题是,“Id”不是此类的属性,并且由于 WebGridRow 继承自 DynamicObject,“.Id”属性究竟如何映射到当前行的“源对象”?
顺便说一句,源对象“对象值”是通过 WebGridRow 的构造函数传递的
public WebGridRow(WebGrid webGrid, object value, int rowIndex)
{
_grid = webGrid;
_value = value;
_rowIndex = rowIndex;
_dynamic = value as IDynamicMetaObjectProvider;
}
列定义
public Func<dynamic, object> Format { get; set; }
列在“WebGridRenderer”类中调用为
foreach (var row in webGrid.Rows)
{
.....
foreach (var column in columns)
{
var value = ...Format(column.Format, row).ToString();
...
}
}
最后是“WebGridRenderer”中的“Format”函数
private static HelperResult Format(Func<dynamic, object> format, dynamic arg) {
var result = format(arg);
....
}