ビューの最後に、選択したチェックボックスの配列を作成する JavaScript があります。フォームを送信するボタンを使用すると、フォーム コレクションやその他のパラメーターにアクセスできます。クリック イベントを同じボタンにアタッチして Java スクリプトを実行すると、JavaScript のデータは送信されますが、フォーム コレクション パラメータは null になります。スクリプトからクリック機能を削除すると、スクリプト モデル パラメータは null になり、他のパラメータは問題ありません。
これが、スクリプト データがコントローラーに到達する方法です。
モデルを使用しています: namespace SchoolIn.ViewModels { public class EnrollmentOptionsVM {
public virtual string OptionID{ set;get;}
public virtual string UserChoice { set;get;}
}
}
[HttpPost]
public ActionResult Edit(int id, FormCollection formCollection, String[] options, List<EnrollmentOptionsVM> model, String[] instructorString, String[] selectedteacher,string[] selectedCourses, Student student, string course, Enrollment enrolls, Assignment assignment, String[] searchString)
<script type="text/javascript">
var $checkboxes = $('input[type="checkbox"]');
$(document).ready(function () {
var options= [];
$.each($checkboxes, function () {
if ($(this).is(':checked')) {
var item={ "UserChoice" : "checked", "OptionID": "YouCanSetIDHere"};
}
else
{
var item={ "UserChoice" : "unchecked", "OptionID": "YouCanSetIDHere"};
}
options.push(item);
})
$.ajax({ type:
'POST', url: '@Url.Action("Edit","Student")',
contentType: 'application/json',
data: JSON.stringify(options)
}).done(function (html) {
});
alert('success')
});
</script>
そして、これが Edit Post の署名です。
[HttpPost]
public ActionResult Edit(int id, FormCollection formCollection, String[] options, List<EnrollmentOptionsVM> model, String[] instructorString, String[] selectedteacher,string[] selectedCourses, Student student, string course, Enrollment enrolls, Assignment assignment, String[] searchString)
スクリプトに alert() を入れて、正常に実行されることを確認しました。クリック イベントでスクリプト コードをラップしないと、モデル値が null になるのはなぜですか?