我有一个完全可配置的实体框架模型。通过可配置,我的意思是用户可以选择哪些字段是否可见,是否需要以及是否为只读。我通过覆盖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
等字段提前谢谢。
答案 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));
}