在ASP .NET MVC中动态生成@ Html.EditorFor的表达式

时间:2014-04-30 15:06:38

标签: c# asp.net-mvc asp.net-mvc-5

我有一个完全可配置的实体框架模型。通过可配置,我的意思是用户可以选择哪些字段是否可见,是否需要以及是否为只读。我通过覆盖DataAnnotationsModelMetadataProvider类来应用配置,现在问题是使用Model with Html.EditorFor Helper。

我不想遍历每个属性并添加Html.EditorFor,如下所示

@foreach(var field in fieldConfig)
{
    Html.EditorFor(...Dynamicaly Created Expression...)
}

编辑: fieldConfig是ConfigTable中的列表,它包含FieldName,IsRequred,IsReadOnly,OrderNo,Type

等字段

提前谢谢。

3 个答案:

答案 0 :(得分:0)

尝试

@foreach(var field in fieldConfig)
{
Html.EditorFor(model=> field)
}

上次我使用它有效

答案 1 :(得分:0)

如果您希望“动态表达”成为字符串,则可以使用

Html.Editor("MyProperty")

甚至

Html.Editor("MyProperty.AnotherProperty.Name")

代替。

它需要一个字符串表达式,其工作方式与EditorFor相同,但不是类型安全。

或者你不想做类型安全并学习如何创建表达式树:http://weblogs.asp.net/dixin/archive/2009/11/29/understanding-csharp-3-0-features-6-lambda-expression.aspx

答案 2 :(得分:0)

也许你可以尝试这样的东西,通过使用反射你可以得到你的类的属性。我没有尝试,所以你可以检查一下:

var properties = Model.GetType().GetProperties();


foreach (var field in properties)
{
    Html.EditorFor(model => field.GetValue(Model, null));
}