2017-08-06 7 views
0

私はこれらのプロパティのいくつかの入力をレンダリングするためにViewData.ModelMetadata.Properties周りを反復処理しています:ModelMetaData.Propertiesから入力フィールドを動的に作成することは可能ですか?

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

私は

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

で正しくLabelForを表示することができています。しかし、私は編集者が働くように見えることはできません。

私は

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

を試してみました。しかし、私はこのエラーを見ています:私も

@Html.HiddenFor(model => property) 

を試みたが、その値は、コントローラ

nullとして伝わってくる

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

これを行うことは可能ですか、または手動で各入力をコーディングする必要がありますか?

答えて

0

私はこの問題を解決することができた:

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

そして値が現在のコントローラに通じ引っ張ります。

ViewModel

のプロパティ名と一致するように、それはすべて name属性である必要があります。
関連する問題