是否可以从 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
的 属性 名称
我正在迭代 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