在ASP.NET MVC中动态生成@Html.EditorFor的表达式
本文关键字:@Html EditorFor 表达式 动态 ASP NET MVC | 更新日期: 2023-09-27 18:00:53
我有一个完全可配置的实体框架模型。所谓可配置,我的意思是用户可以选择哪些字段是可见的还是不可见的,是必需的还是不需要的,是只读的还是不只读的。我通过重写DataAnnotationsModelMetadataProvider类来应用配置,现在问题是使用带有Html.EditorFor Helper的Model。
我不想循环浏览每个属性并添加Html.EditorFor,就像下面的一样
@foreach(var field in fieldConfig)
{
Html.EditorFor(...Dynamicaly Created Expression...)
}
编辑:fieldConfig是ConfigTable中的列表,它包含FieldName、IsReured、IsReadOnly、OrderNo、Type 等字段
提前谢谢。
如果您希望"动态表达式"是字符串,可以使用
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
尝试
@foreach(var field in fieldConfig)
{
Html.EditorFor(model=> field)
}
上次我使用它时,它工作
也许您可以尝试类似的方法,通过使用反射可以获得类的属性。我没有试着让你站在你这边检查:
var properties = Model.GetType().GetProperties();
foreach (var field in properties)
{
Html.EditorFor(model => field.GetValue(Model, null));
}