我的数据库中有名为 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 文件夹中有一个字段的编辑器模板:
@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>
想法?我走在正确的道路上吗?