Изменить значение БД при нажатии на CheckBox для использования MVC

Это мой первый вопрос о SO, поэтому, пожалуйста, имейте сердце. Я работаю над проектом, чтобы сообщения могли быть помечены как непрочитанные. Когда пользователь нажимает на детали, он помечает сообщение как прочитанное, но я пытаюсь использовать CheckBoxFor, чтобы позволить пользователю пометить сообщение как непрочитанное. Вот моя попытка после тщательного исследования. Кажется, я не могу получить сообщение, которое будет помечено как непрочитанное, когда я вернусь к основному виду.

Вот CheckBoxFor в Details.cshtml:

<dd>
     @Html.CheckBoxFor(model => model.UnreadMessage, new { onclick = "UpdateUnreadMessage(this)" })
</dd>

И вызов jQuery для определения статуса CheckBoxFor:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
function UpdateUnreadMessage(elem) {
    var UnreadMessage = $(elem).is(':checked');
    $.ajax({
        type: 'POST',
        url: "@Url.Action("UpdateUnreadMessage", "Details")",
        data: { check: UnreadMessage,},
        success: function (res) {
            console.log(res);
        },
        dataType: 'json'
    });
}
</script>

А вот метод POST в MessageController:

// POST: Message/Details/5
[HttpPost]
public ActionResult UpdateUnreadMessage(bool check, Guid? id)
{
    Message message = db.Messages.Find(id);
    if (check == true)
    {
        message.UnreadMessage = true;
    };
    db.SaveChanges();
    return View();
}

Может кто-нибудь, пожалуйста, помогите мне понять, что я делаю неправильно? Я очень ценю это.

3 ответа

Если метод POST в MessageController, тогда обновите URL как

url: "@ Url.Action (" UpdateUnreadMessage ","Message")"

Вы не передали идентификатор сообщения, которое хотите пометить как непрочитанное. Передайте его на вашу AJAX-функцию:

data: { check: UnreadMessage, id: YourVariableIDHere },

Так что я смог решить, что происходит. Мне нужно было пройти через удостоверение личности. Вот как я смог заставить его работать.

CSHTML:

<dd>@Html.CheckBoxFor(model => model.UnreadMessage, new { id = "UnreadCheckBox" })</dd>

СЦЕНАРИЙ:

<script>
$("#UnreadCheckBox").change(function () {
    var UnreadMessage = $(this).is(':checked');
    $.ajax({
        type: 'POST',
        url: "@Url.Action("UpdateUnreadMessage", "Message")",
        data: { check: UnreadMessage, id: '@Model.MessageID' },
        success: function (res) {
            console.log(res);
        },
    });
});

И, наконец, в контроллере:

        public ActionResult UpdateUnreadMessage(bool check, Guid? id)
    {
        Message message = db.Messages.Find(id);
        if (check == true)
        {
            message.UnreadMessage = true;
        }
        else{
            message.UnreadMessage = false;
        }
        db.SaveChanges();
        return Content("Succesful Update");
    }

Спасибо всем за вашу помощь и предложения.

Другие вопросы по тегам