Изменить значение БД при нажатии на CheckBox для использования MVC - PullRequest
0 голосов
/ 05 июня 2018

Это мой первый вопрос о SO, поэтому, пожалуйста, имейте сердце.Я работаю над проектом, чтобы сообщения могли быть помечены как непрочитанные.Когда пользователь нажимает details , он помечает сообщение как прочитанное, но я пытаюсь использовать 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 ]

0 голосов
/ 06 июня 2018

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

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

0 голосов
/ 08 июня 2018

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

CSHTML:

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

SCRIPT:

<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");
    }

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

0 голосов
/ 05 июня 2018

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

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