私はチェックボックスリストとドロップダウンリストを持っています。私は、ドロップダウンリストから選択した値を渡し、チェックボックスをMVC3コントローラに渡し、モデルバインドを使用したいと思います。jQueryで複数のオブジェクトをMVC 3コントローラに送信
チェックボックスのためのViewModel:StateViewModel /Views/Home/EditorTemplates/StateViewModel.cshtml
ため
public class StateViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
public IEnumerable<TransitionViewModel> Transitions { get; set; }
}
エディタテンプレート:
@model Mcs.Sibs.UI.Web.Models.StateViewModel
@Html.HiddenFor(x => x.Id)
@Html.HiddenFor(x => x.Name)
<div>
@Html.CheckBoxFor(x => x.Checked)
@Html.LabelFor(x => x.Checked, Model.Name)
</div>
マイビュー:コントローラにデータを送信している
@using (Html.BeginForm("GetSchedules", "Home", FormMethod.Post, new { id = "checkboxFrm" }))
{
@Html.EditorForModel()
<input id="ShowReportScheduleBtn" type="button" value="Show schedule" onclick="ShowReportSchedules()" />
}
ボタンのクリックハンドラ:
function ShowReportSchedules() {
var selectedGenerationId = $('#SelectedGenerationId').val();
var statesData = JSON.stringify($('#checkboxFrm'));
var statesData2 = $('#checkboxFrm').serialize(); //I also tried this
$.ajax({
type: 'POST',
url: '/Home/GetSchedules',
data: { "generationId": selectedGenerationId, "states": statesData },
dataType: "json",
contentType: 'application/json; charset=utf-8'
});
};
最後に、私のコントローラ:
[HttpPost]
public ActionResult GetSchedules(int generationId, IEnumerable<StateViewModel> states)
{
return View("Index");
は、私は私のコントローラに値を渡すことはできません。私はjQueryを使わずにstatesData
オブジェクトのみを渡し、私のフォームにはtype="submit"
を使用しています。 statesData
とjQueryだけを渡そうとしたときに、type="button"
FireBugに「JSONプリミティブが無効です」というエラーが表示されました。
整数+ statesData
オブジェクトを渡そうとすると、IE 9がクラッシュしてFirefoxがハングします。
私は様々なソリューションを試しましたが、成功しませんでした。
OK、今私は例外を取得しない、generationIdは、コントローラに渡されますが、状態はありません。これは私が投稿メッセージに得たものです: 州=%255B0%255D.Id%3D1%26%255B0%255D.Name%3DObrada%26%255B0%255D.Checked%3Dfalse%26%255B1%255D.Id%3D2 %26%255B1%255D.Name%3DVerifikacija%26%255B1%255D.Checked%3Dtrue%26など。 –
OK、「データ」から中括弧とパラメータ名を削除しても問題なく機能しました。これは次のようなものです: data:$( '#checkboxFrm')。serialize() これは正しく動作します(正しくシリアライズされています)。私はこの答えを正しいとマークしますが、jquery経由で複数のオブジェクトを送信する方法はありますか? –