0

このような複雑なモデルを、複数のオブジェクトを含む複数のレイヤーにバインドするにはどうすればよいですか? 現在、モデルをビューに渡します-(フォーム/チェックボックスツリーにデータを入力)、正確なモデル(SubjectSelectionModel)を戻したいのですが、正しくバインドされていません。

これらを私のビューに正しくバインドするために必要なプロセスについて、誰か詳しく説明してもらえますか?

モデルを見る:

public class SubjectSelectionModel
{
    public IList<Subject> Subjects { get; set; }
}

対象クラス:

public class Subject
{
    public String Name { get; set; }
    public IList<Bin> Bins { get; set; }

    public Subject()
    {

    }

    public Subject(IList<Course> courses)
    {

    }
}

ビンクラス:

public class Bin 
{
    public Subject Subject { get; set; }
    public int Amount { get; set; }

    public IList<Foo> Foos { get; set; }
}

フークラス:

public class Foo
{
    public int Number { get; set; }
}
4

2 に答える 2

5

ここでエディター テンプレートが役立ちます。これをいじる代わりに、単純なエディター テンプレートを使用して、面倒な作業をすべて処理できます。

~/Views/Shared/EditorTemplates にいくつかのテンプレートを作成すると、プライマリ ビューでは次のようになります。

View.cshtml

@model SubjectSelectionModel
@using(Html.BeginForm()) {
    @EditorFor(m => m.Subjects)
    <input type="submit" />
}

Subject.cshtml

@model Subject
@Html.EditorFor(m => m.Name)
@Html.EditorFor(m => m.Bins)

Bin.cshtml (Subject をレンダリングしたくないと仮定します。これは無限ループになります)

@model Bin
@Html.EditorFor(m => m.Amount)
@Html.EditorFor(m => m.Foos)

Foo.cshtml

@model Foo
@Html.EditorFor(m => m.Number)

もちろん、html のフォーマットを好きなように変更したい場合もありますが、本質的にはそれだけです。

于 2012-10-10T02:00:03.017 に答える
1

MVC がコレクション内のインデックスを使用してバインドできるように、オブジェクトの for ループが必要です。

例:

for (int subjectIndex = 0; subjectIndex < Model.Subjects.Count; subjectIndex++) {
    @Html.TextBoxFor(x => x.Subjects[subjectIndex].Name)

    for (int binIndex = 0; binIndex < Model.Subjects.Bins.Count; binIndex++) {
        @Html.TextBoxFor(x => x.Subjects[subjectIndex].Bins[binIndex].Amount)
    }
}

..等。

ここで、同様の質問に同様の回答をしました:Generating an MVC RadioButton list in a loop

于 2012-10-10T01:48:45.383 に答える