同様の理由をカバーする質問がたくさんあるようですが、私が抱えている問題を明確にする質問は見つかりませんでした。
次のような単純なタスク リストを作成しようとしています (申し訳ありませんが、画像を投稿できません)。
| CheckBox | Title | DeleteLink |
| CheckBox | Title | DeleteLink |
| CheckBox | Title | DeleteLink |
モデルを更新するチェックボックスを取得できません (チェックボックスをクリックして関連するコントローラーを呼び出し、モデルの更新された状態を設定する必要があります)
コントローラーの署名/パラメーターが間違っている可能性があります。
現在、チェックボックスをオンにしてから別のタスクを削除すると、古いチェックボックスの状態がレンダリングされます (モデルは更新されていません)。
ここに私のモデルがあります
namespace TaskList.Models
{
public class TaskListModel
{
public List<TaskItem> Tasks { get; set; }
}
public class TaskItem
{
[Key]
public int Id { get; set; }
public string Title { get; set; }
public DateTime EntryDateTime { get; set; }
public bool IsDone { get; set; }
}
}
これが私の見解です
@using (@Html.BeginForm("Edit", "Home"))
{
<table>
@for (int i = 0; i < Model.Tasks.Count; i++)
{
<tr>
<td>
@Html.CheckBoxFor(m => m.Tasks[i].IsDone)
</td>
<td>
@Html.EditorFor(m => m.Tasks[i].Title)
</td>
<td>
@Html.ActionLink("Delete", "Delete", new { id = Model.Tasks[i].Id })
</td>
</tr>
}
</table>
}
そして、コントローラーアクション(呼び出されていない)での私の試み
// Mark a task as complete
[HttpPost]
public ActionResult Edit(int id = 0, bool isChecked = false)
{
// database logic
TaskItem taskItem = _db.Tasks.Find(id);
taskItem.IsDone = isChecked;
_db.SaveChanges();
return RedirectToAction("Index");
}
要求に応じて Delete メソッド
// Delete a task
public ActionResult Delete(int id = 0)
{
if (id > 0)
{
// database logic
TaskItem taskItem = _db.Tasks.Find(id);
_db.Tasks.Remove(taskItem);
_db.SaveChanges();
}
return RedirectToAction("Index");
}
このJavaScriptをビューに追加しようとしました
$(function () {
$(':checkbox').change(function () {
$.ajax({
url: '@Url.Action("Edit", "Home")',
type: 'POST',
data: { id: $(this).id, isChecked: $(this).is(':checked') },
success: function (result) {
}
});
});
});
呼び出されているかどうかわからない
まだJOYはありません