1

私はクラスを持っています:

public class CarList
{
    public int quantity{get;set;}
    public List<Car> Cars {get;set;}
}

public class Car {
    public string Name {get;set;}
}

次に、リストに 3 台の車を含む車のリストを作成します。次に、for ループ Model.Cars 内で使用して画面に情報を表示します。フォームを送信すると、数量フィールドには有効な値がありますが、車は null です。

[HttpPost]
public ActionResult Save(CarList list)
{
    //why is list.Cars NULL when i am posting three items in the list
}

表示: モデル = 車、行を追加

Car 用の新しいエディタ テンプレートを追加<tr><td>Name</td><td>Html.TextBoxFor(x=>Model.Name)</td></tr>

メイン ビュー: Model = CarList、forloop を追加

@{foreach (Car item in Model.Cars)
       {
           @Html.EditorFor(x=>item);
       }
4

3 に答える 3

1

実際には、cars コレクションをループする必要はありません。あなたはちょうどそれのように持っています

@Html.EditorFor(x => x.Cars)
于 2012-05-15T23:52:12.877 に答える
0

これが問題だと思います:

@foreach (Car item in Model.Cars)
       {
           @Html.EditorFor(x=>item);
       }

に変更します

@foreach (Car item in Model.Cars)
       {
           @Html.EditorFor(x=>item.Name);
       }

モデルバインダーが複数のレベルをバインドするのに十分スマートでない場合がありますが、その問題が発生したことは覚えていません. Glimpse (http://getglimpse.com/)をプロジェクトに追加すると 、リクエストが実際にどのように処理されるかを確認できるようになります。

于 2012-05-15T22:58:16.800 に答える
0

EditorTemplateを使用すると、うまくいきます。

「 EditorTemplates 」という名前のフォルダーを作成し、次の名前のビュー (エディター テンプレート) を作成します。Car.cshtml

ここに画像の説明を入力

この新しいビューに以下のコードを追加します。

@model Car
<p>
   @Html.TextBoxFor(x => x.Name)
</p>

メイン ビューで、Html.EditorFor HTML ヘルパー メソッドを使用して、このエディター テンプレートを呼び出します。

@model SO_MVC.Models.CarList
<h2>CarList</h2>
@using (Html.BeginForm())
{
    <p>Quanitty </p>
    @Html.TextBoxFor(x => x.quantity) 
    @Html.EditorFor(x=>x.Cars)
    <input type="submit" value="Save" />
}

フォームの投稿を受け入れる HTTPPOst アクション メソッドが追加されました。

[HttpPost]
public ActionResult CarList(CarList model)
{
   //Check model.Cars property now.
}

今すぐ結果が表示されます ここに画像の説明を入力

于 2012-05-15T23:50:04.000 に答える