チェックボックスの状態が変更されるたびに発生するチェックボックスのクリックイベントリスナーを含む私のビュー:
<html>
<head>
<script type="text/javascript" src="~/scripts/jquery.unobtrusive-ajax.js"></script>
<script type="text/javascript" src="~/scripts/jquery-1.4.4.js"></script>
<title>TestChckBox</title>
<script type="text/javascript">
$(function () {
$(document).on("click", "input.chks", function (e) {
var _this = $(this);
var isChecked = _this.is(':checked');
$.post("@Url.Action("UpdateInput","Search")?id=" + _this.attr("id") +
"&newValue=" + isChecked, function (data) {
// response stuff should be here
});
});
});
</script>
</head>
--
@if (ViewBag.SliceList != null)
{
@*foreach(Pirsum.Models.HourSlice slice in this.Model) {*@
foreach (var slice in ViewBag.SliceList) {
<div class="row">
<input class="chks" type="checkbox" id="@HtmlHelper.GenerateIdFromName("cb_slice." + @slice.SliceID)" />
<label for="@HtmlHelper.GenerateIdFromName("cb_slice." + @slice.SliceID)">@slice.SliceName</label>
<span class="info">@slice.StartTime - @slice.EndTime</span>
</div>
}
}
<input type="submit" value="Submit" />
}
</body>
</html>
ビューバッグ内のアイテムをビューに渡すアクションから、いくつかのチェックボックスと文字列が div に正しく取り込まれます。
問題は、上記の関数が機能せず、チェックボックスがクリックされたり、クライアント側でクリックイベントが発生したりしたときに、検索コントローラーで「UpdateInput」が起動されないことです。
私は何を間違っていますか?また、チェックボックスの状態(チェックされているものとチェックされていないもの)をセッションで適切に保存するにはどうすればよいですか?または他のオプションで、ランタイムに設定されたチェックされたパラメーターを一時的に保存できますか?
参照用のコントローラーアクション、これはボディにデータを送信します(関連するチェックボックスと問題に関するその他のデータ)
public ActionResult TestChckbox()
{
int iInstId = 1;
Test.Models.DataLayer db = new Test.Models.DataLayer();
Test.Models.TestDB.context = new Models.TestDB();
IEnumerable<Test.Models.HourSlice> lst = db.GetSlices(context, iInstId).OrderBy(a => a.SliceID);
ViewBag.SliceList = lst;
return View(lst);
}
このアクションは、ボックスをチェック/チェック解除するときにチェックボックスの状態で実行する必要があります。
[HttpPost]
public ActionResult UpdateInput(int id, bool newValue)
{
//do your saving here.
return Json(true);
}