在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 等字段

提前谢谢。

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

如果您希望"动态表达式"是字符串,可以使用

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));
}