2009-04-02 17 views
23

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

たとえば、私は人のテーブルを持っていて、自分が所有する車両を含むテーブルを持っているとします。 1つのフォームで、特定の人にすべての車両を表示し、間違いがある場合にデータ要素を編集可能にする(ナンバープレート番号、車色など)。私は、各車両のための別の編集フォームにジャンプしたくない。

これまでの試みでは、データを表示することができましたが、コントローラにポストバックすることはできません。私はhereまで問題を絞り込もうとしましたが、まだそれが得られていないので、もっと広い例が整っていると思います。何か案は?

答えて

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);は "青"と表示されます。

これは非常に簡単な例ですが、私はあなたがそのアイデアを得ていると確信しています。配列、リスト、コレクション、辞書へのフォームのバインドの例については、hereをご覧ください。

+0

感謝!これはまさに私が探していたものであり、Hanselmanの記事は完璧でした。 – gfrizzle

+0

あなたは大歓迎です:) –

+0

これは、/ Create URLにPOSTを実行してもうまく動作しますが、/ Edit URLでGETを実行しても既存のデータにバインドされません。私の作成ページと編集ページは、同じ部分図を使用しているため、同じ強く型付けされたモデルを使用しています。なぜどんなアイデア? – JMS

0

これはAJAX投稿を使用することで解決できると思います。ユーザーが送信ボタンをクリックするたびに、そのイベントをフックして、永続化して送信したいもののJSON配列を作成します。

もちろん、他の方法は、POSTアクションで "FormCollection"オブジェクトからすべての情報を取得することです。すべてのキーを繰り返し解析してデータを解析し、それを処理するだけです。

関連する問題