0

这是我关于 SO 的第一个问题,所以请放心。我正在做一个项目,使消息能够被标记为未读。当用户单击详细信息时,它会将消息标记为已读,但我正在尝试使用CheckBoxFor来允许用户将消息标记为未读。这是我在彻底研究后的尝试。当我返回主视图时,我似乎无法将消息标记为未读。

这是 Details.cshtml 中的 CheckBoxFor:

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

以及确定 CheckBoxFor 状态的 jQuery 调用:

<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>

这是 MessageController 中的 POST 方法:

// 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();
}

有人可以帮我弄清楚我做错了什么吗?我非常感激。

4

3 回答 3

0

所以我能够解决正在发生的事情。我确实需要通过ID。这就是我如何让它工作的方法。

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

谢谢大家的帮助和建议。

于 2018-06-08T16:18:59.587 回答
0

如果 MessageController 中的 POST 方法,则将 url 更新为

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

于 2018-06-05T21:50:38.867 回答
0

您没有传递要标记为未读的消息的 ID。也将它传递给您的 AJAX 函数:

data: { check: UnreadMessage, id: YourVariableIDHere },
于 2018-06-05T20:01:03.437 回答