0

だからこれを想像してください:

ビューがあります。次の形式で、このビューを持つモデルがあります。

Id
List<Food>

各食品には、次のものがあります。

Id
Name
List<Ingredients>

各成分には以下が含まれます:

Id
Name
Qty

これは1モデルです。

このモデルを取り込むビューがあります。次に、リストを取得して画面にレンダリングする部分ビューを作成します。これは機能しますが、フォームが送信されると (ボタンはメイン ビューにあります)、データはバインドに失敗するか、モデルに表示されません。

データをバインドできる正しい方法は何ですか?

全体を取り出してメインビュー自体に配置すると機能しますが、再利用性の理由から、部分ビューにするのが理にかなっているので、任意のページに「ドロップ」してデータを渡すことができます。

部分ビューには次のものが含まれます。

@model List<FoodProject.Web.Models.FoodViewModel>

ありがとう

アップデート

EditorTemplate を使用してみましたが、Html.Partial を使用する前と同様に、モデル バインディング規則をほぼ尊重しているようです。それは次のようなものを生み出していました:

[0].PropertyName

それ以外の:

ModelName[0].PropertyName

テンプレート エディターはほとんどありますが、次のように表示されます。

ModelName.[0].Id

これが、投稿時にモデルコレクションに null が返される理由だと思いますが、モデルバインディングを尊重するにはどうすればよいですか? どこが間違っているのですか?

4

1 に答える 1

1

私にとってはうまくいったので、あなたはエディターテンプレートに親しむ必要があります。私の例を示します。おそらく、何が間違っているかを理解するのに役立つでしょう。

モデル:

public class TestModelA
{
    public List<TestModelB> PropA { get; set; }
}

public class TestModelB
{
    public string PropB { get; set; }
}

Views/Shared/EditorTemplatesに配置されたエディター テンプレート ( TestModelB.cshtml ) :

@model MvcTest.Models.TestModelB
@Html.EditorFor(m => m.PropB)

メイン ビュー:

@model MvcTest.Models.TestModelA
@using (Html.BeginForm())
{
    @Html.EditorFor(m => m.PropA)
    <input type="submit" value="Submit" />
}
于 2013-09-12T01:35:58.697 に答える