c# - 从 ASP.NET MVC Lambda 表达式中获取值

标签 c# html asp.net-mvc lambda html-helper

我正在尝试创建我自己的 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/

相关文章:

asp.net-mvc - 在 ASP.NET MVC 3 中使用 WebGrid 显示原始 HTML

asp.net-mvc - ServiceStack DefaultRedirectPath 未触发

c# - 为什么 C# 将所有方法和类型标记为 System.Runtime.InteropServices.Charset.Ansi?

javascript - 使用 PhoneGap 在 iOS 上录音

javascript - HTML 日期 : Get Correct date in yyyy - mm - dd

javascript - 将视差滚动与 "mouse tracker"相结合

asp.net - 如何将 DynamicData 路由与 Mvc 路由混合使用?

c# - 在 C# 中显示多行静态文本的最佳方式?

c# - c#中备注标签的用途是什么

c# - 设计数据库文件格式