我正在尝试创建我自己的 HTML 帮助器,它接受一个表达式(类似于内置的 LabelFor<> 帮助器。我找到了当表达式类似于此时获取属性值的示例:
model => model.Forename
但是,在我的一些模型中,我想获取子元素中的属性,例如
model => mode.Person.Forename
在这些示例中,无论如何我都找不到(轻松地)获取 Forename 的值。任何人都可以建议我应该如何获得这个值(value)。
谢谢
最佳答案
如果您使用的模式与 LabelFor<> 方法使用的模式相同,则表达式将始终是 LambdaExpression,您只需执行它即可获取值。
var result = ((LambdaExpression)expression).Compile().DynamicInvoke(model);
通常,您始终可以将泛型表达式包装在 LambdaExpressions 中,然后编译并调用它们以获取值。
如果您想要的不是 Forename 的值,而是字段本身(fx. 打印出字符串“Forename”),那么您唯一的选择是使用某种形式的 expressionwalking。在 C#4 中,框架提供了一个名为 ExpressionVisitor 的类,可用于此目的,但对于早期版本的框架,您必须自己实现它 - 请参阅:http://msdn.microsoft.com/en-us/library/bb882521(VS.90).aspx
关于c# - 从 ASP.NET MVC Lambda 表达式中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3813340/