昨夜、MVC2以来取り組んできたものをまとめようとしました。
次のクラスがあるとします。
public class RouteSaveViewModel
{
public string Title { get; set; }
public string Comments { get; set; }
public string DepartureDate { get; set; }
public string ArrivalDate { get; set; }
public List<int> LocationIds { get; set; }
}
...そして以下のアクション:
[HttpPost]
public ViewResult SaveRoute(RouteSaveViewModel route)
{
// yada yada
return SomethingShiny();
}
$.ajaxまたは$.postを使用してデータを渡したいのですが。フォームは、ユーザーからデータを収集して送信するための多段階です。ロケーションIDを作成するために使用するコードは次のとおりです。
var routeStopIds = [];
$(".route-stop").each(function(){
routeStopIds.push($(this).attr('data-id'));
});
ブラウザ内の開発ツールとフィドラーを使用して、この配列に期待するIDが含まれていることを確認しました。最後に、データを送信するために、以前のMVCビルドで行ったようにオブジェクトをマッピングしています。
$.ajax({
type: 'post',
url: postUrl,
data: {
Title: $("#route-title").val(),
Comments: $("#route-description").val(),
DepartureDate: depDate,
ArrivalDate: arrDate,
LocationIds: routeStopIds
},
dataType: 'JSON'
});
私が見ているのは、パラメータを除くすべてのデータが入力されていることです。また、を受け入れるだけで、どちらも機能していないように見える変更に配列LocationIds
だけを送信しようとしました。いずれにせよ、はnullですが、リクエストのフォームパラメータにフォームエンコードされた値があります。routeStopIds
SaveRoute
List<int>
LocationIds
{LocationIds%5b%5d=44&LocationIds%5b%5d=4&LocationIds%5b%5d=2}
...それでも、HttpValueCollectionは単なるLocationIds[]
空の配列です。
それで、私は明白な何かを逃していますか?多分それほど明白ではありませんか?モデルバインディングによって配列が取得されるようにするにはどうすればよいですか?