23

親/子データをすべて1つのフォームに表示し、すべての子レコードを編集可能にするMVCビューの例またはチュートリアルを知っている人はいますか?

たとえば、人のテーブルと、彼らが所有する車両を含む別のテーブルがあるとします。1 つのフォームで、特定の人物のすべての車両を表示し、間違いがあった場合に備えてデータ要素 (ナンバー プレートの番号、車の色など) を編集できるようにしたいと考えています。車両ごとに個別の編集フォームにジャンプしたくありません。

これまでの試みにより、データを表示できるようになりましたが、コントローラーにポストバックすることはできません。ここでできる限り問題を絞り込もうとしましたが、まだ理解できていません。より広い例が適切であると思います。何か案は?

4

2 に答える 2

27

このようなものを試すことができます。

このオブジェクトがあるとします:

public class Vehicle
{
    public int VehicleID { get; set; }
    public string LicencePlate { get; set; }
    public string Color { get; set; }
}

これは、車両の詳細 (フォームを投稿する場所) を編集するために使用するコントローラー アクションです。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditVehicles(int Owner, Vehicle[] vehicles)
{
    //manipulate the data, then return back to the list
    return RedirectToAction("YourAction");
}

次に、フォームを次のように設定する必要があります。

<!--have a form for each person, listing their vehicles-->
<form action="/EditVehicles" method="post">
    <input type="hidden" name="Owner" value="25" />
    <input type="hidden" name="Vehicles[0].VehicleID" value="10" />
    <input type="text" name="Vehicles[0].LicencePlate" value="111-111" />
    <input type="text" name="Vehicles[0].Color" value="Red" />
    <input type="hidden" name="Vehicles[1].VehicleID" value="20" />
    <input type="text" name="Vehicles[1].LicencePlate" value="222-222" />
    <input type="text" name="Vehicles[1].Color" value="Blue" />
    <input type="submit" value="Edit" />
</form>

これは、DefaultModelBinder がフォーム データをコントローラーのモデルに正しくバインドするのに役立ちます。したがってResponse.Write(vehicles[1].Color);、コントローラーでは、「青」と出力されます。

これは非常に単純な例ですが、お分かりいただけると思います。配列、リスト、コレクション、辞書へのフォームのバインドに関するその他の例については、こちらをご覧ください。

于 2009-04-03T07:06:24.967 に答える