データベースに Sections and Fields というテーブルがあります。セクションにはフィールドが含まれます。フィールドは、テキストボックスまたはチェックボックスにすることができます。これを使用して、データ入力用の HTML フォームを動的に作成しています。
セクションにバインドされたビューがあります:
@model Data.Section
@using (Html.BeginForm("SaveSection", "MyController"))
{
@Html.ValidationSummary(true)
<div class="fields">
@Html.EditorFor(m => m.Fields)
</div>
<input type="submit" value="Save">
}
次に、EditorTemplates フォルダーに Field のエディター テンプレートがあります。
@model Photon.Data.Field
@if (Model != null)
{
<span class="label">@Html.DisplayFor(m => m.Name)</span>
<span class="field">
@Html.EditorFor(m => m.FieldValues)
</span>
}
(FieldValues のエディター テンプレートがありますが、ここでは関係ないと思います。)
上記のソリューションは、テキストボックスとチェックボックスのリストに最適です。ユーザーがそれらを編集して [保存] をクリックすると、コントローラー メソッドにポストバックされます。
[HttpPost]
public ActionResult SaveSection(Section model)
{
// do some magic
}
メソッドに渡されたセクション モデルは有効で、ページのフィールドにバインドされています。
ここで私は困惑しています: これらのセクションのいくつかでは、フィールドを特定の html 形式で配置する必要があります (水平方向またはドキュメントのフォームのように見えるようにするなど)。したがって、セクションにテンプレート名を割り当て、そのテンプレートにすべてのフィールドをロードすることを考えました。
<div class="fields">
@if (Model.IsTemplated)
{
@Html.EditorFor(m => m.Fields, Model.TemplateName)
}
else
{
@Html.EditorFor(m => m.Fields)
}
</div>
これらすべてのフィールドを単なるリストではない特定の html 形式でレイアウトしたい場合、Model.TemplateName のビューはどのようになりますか?
私がいる場所は次のとおりです。
@model IEnumerable<Data.Field>
<table border="1">
<tr>
<td>
How do I display one field here with EditorFor?
</td>
<td>
How do I display another field here with EditorFor?
</td>
<td>
How do I display and another field here with EditorFor?
</td>
</tr>
</table>
アイデア?ここで正しい道を進んでいますか?