是否可以从 ModelMetaData.Properties 动态创建输入字段?

Is it Possible to Dynamically Create Input Fields from ModelMetaData.Properties?

我正在迭代 ViewData.ModelMetadata.Properties 以呈现这些属性的一些输入:

@foreach (var property in ViewData.ModelMetadata.Properties
                .Where(p => (p.AdditionalValues.Count > 0) && ((bool)p.AdditionalValues["tags"])))
{
    // Generate form here
}

我可以使用

正确显示 LabelFor
@Html.LabelFor(model => Model, 
    property.DisplayName, 
    htmlAttributes: new { @class = "control-label col-md-2" })

但我似乎无法让编辑器正常工作。

我试过了

@Html.HiddenFor(model => model.GetType().GetProperties().First(t=>t.Name == property.PropertyName))

但我看到了这个错误:

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

我也试过了

@Html.HiddenFor(model => property)

但是随后该值作为 null 传递给控制器​​

是否可以这样做,或者我需要手动对每个输入进行编码吗?

我解决了这个问题:

<input class="form-control" id="@($"{property.PropertyName}Field")"
       name="@property.PropertyName" type="hidden" value="" />

现在,该值将传递给控制器​​。

我猜它只需要 name 属性来匹配 ViewModel

的 属性 名称