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 フォルダーに 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>

アイデア?ここで正しい道を進んでいますか?

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 に答える