5

私の ASP.NET MVC サイトでは、一部の機能により、ユーザーは特定の会場が開いている時間を入力できます。

これらの時間をデータベースの VenueHours テーブルに格納し、Venues テーブルとの FK と PK の関係に加えて、DayOfWeek、OpeningTime、および ClosingTime パラメーターを格納することにしました。

私のビューでは、ユーザーが知っている時間のみを入力できるようにしたいと考えています。つまり、会場が埋まらない日もあります。チェックボックスが属する DayOfWeek の OpeningTime フィールドと ClosingTime フィールドを有効にするためにユーザーがチェックできるチェックボックスを作成することを考えています。


私の質問は、この情報を HttpPost Controller Action に渡す方法に関するものです。

(7) で渡すことができる最大日数を知っているので、もちろん 7 つの null 許容の VenueHour パラメータをアクションに書き込むことができますが、もっと良い方法があると確信しています。

View 情報を Action に渡される List にバインドできますか? これは、ユーザーが入力できる情報の量に制限がないシナリオに遭遇した場合にも役立ちます.

4

2 に答える 2

13

Scott Hanselman は、デフォルトのモデル バインダーがコレクション、配列、および辞書をどのように処理するかについて、非常に優れた記事を投稿しました。カスタム モデル バインダーを作成するのはそれほど大したことではありませんが、カスタム モデル バインダーを作成したくない場合は便利です。

于 2010-06-17T03:11:51.453 に答える
1

次の手順をお試しください

1 - すべての入力ボックス (DatePicker JQuery コントロールで入力できる)をaspx ビューの div内に配置します。

2 - Jquery セレクターを使用して、Action メソッドにポストする必要があるすべての値 (上記で指定した DIV 内) をクライアント側の JavaScript 配列にキャプチャします。

DIV内の入力要素のフィルタリングを参照してください

var enteredVenueHours = new Array();
for(var i=0;i < inputsInsideDiv.length;i++)
{
    // add the elements to the JS array
}

3 - Jquery ポストを使用して、enteredVenueHours をコントローラー アクションに送り返します**

$.post('<%=Url.Action("ActionMethod")%>',{ EnteredVenueHours: enteredVenueHours,function (data)
{
     // Udpate status to be displayed here. 
});

4 - コントローラー アクション メソッドに次の署名があることを確認します。

[AcceptVerbs(HTTP.Post)]
public ActionResult ActionMethod(List<string> EnteredVenueHours)
{
     // Have the DB persistance logic .
}
于 2010-06-17T05:24:12.600 に答える