2

我的数据库中有名为 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>

想法?我走在正确的道路上吗?

4

1 回答 1

0

我不确定我是否正确理解了您的问题,但是如果您设法到达最终视图,那么在表格行中放置字段应该与此类似?

...
<tr>
    @foreach(var fld in Model)
    {
        <td>
            @Html.EditorFor(m => fld)
        </td>
    }
</tr>
...

(我现在没有和剃须刀设计师一起坐在 Visual Studio 前面,所以对于任何拼写错误,我深表歉意..)

于 2012-12-19T21:03:15.437 回答