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

时间:2017-08-06 13:42:40

标签: c# asp.net-mvc razor 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))

但我看到了这个错误:

  

模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。

我也试过

@Html.HiddenFor(model => property)

然后价值通过null传递给控制器​​

可以这样做,还是需要手动编写每个输入?

1 个答案:

答案 0 :(得分:0)

我能够解决这个问题:

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

现在价值已经转移到控制器。

我猜它需要的是name属性以匹配ViewModel的属性名称