从类型lambda表达式中获取所有属性表达式

时间:2015-04-24 15:02:33

标签: c# razor lambda

我想创建一个可以为类的所有属性生成隐藏字段的HtmlHelper。

在我的剃刀页面中,我将调用以下内容:

@Html.HiddenForObject(x=>x.SomeClass)

其中x是使用@model SomeOtherClass

定义的模型

我的助手定义为=>>

public static MvcHtmlString HiddenForObject<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
            Expression<Func<TModel, TProperty>> expression)

现在有些类有一些我希望为其创建隐藏字段的公共属性。 但在这里我被困住了 我需要找到正确的代码来迭代我的表达式中的所有属性,获取这些属性的表达式,以便我可以调用

//Pseudo code
foreach(var propertyExpression in expression) {
@Html.HiddenFor(expression);
}

我尝试了一些东西,但基本上我没有想法。 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以在表达式上使用反射

        foreach (var p in stage.GetType().GetProperties())
        {

        }

然而,如果你这样做可能会有相当大的性能影响,而且它可以打开一整套安全蠕虫,特别是如果你也使用你的类来访问数据库。

您可以扩展这个想法,并定义一些属性来标记隐藏的字段,并使用您的扩展方法来挑选它们。