1

同様の理由をカバーする質問がたくさんあるようですが、私が抱えている問題を明確にする質問は見つかりませんでした。

次のような単純なタスク リストを作成しようとしています (申し訳ありませんが、画像を投稿できません)。

| 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はありません

4

2 に答える 2

0

チェックボックスがチェックされている場合にのみ、フォームを送信する必要があります。

于 2013-08-30T13:04:00.300 に答える