首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用MVC在CheckBoxFor上单击时更改DB值

使用MVC在CheckBoxFor上单击时更改DB值
EN

Stack Overflow用户
提问于 2018-06-06 03:12:14
回答 3查看 216关注 0票数 0

这是我关于SO的第一个问题,所以请发发善心。我正在做一个项目,使邮件能够被标记为未读。当用户单击details时,它会将邮件标记为已读,但我尝试使用CheckBoxFor来允许用户将邮件标记为未读。这是我在深入研究后的尝试。当我返回到主视图时,似乎无法将邮件标记为未读。

下面是Details.cshtml中的CheckBoxFor:

代码语言:javascript
复制
<dd>
     @Html.CheckBoxFor(model => model.UnreadMessage, new { onclick = "UpdateUnreadMessage(this)" })
</dd>

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

代码语言:javascript
复制
<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方法:

代码语言:javascript
复制
// 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();
}

有人能帮我找出我做错了什么吗?我非常感谢。

EN

回答 3

Stack Overflow用户

发布于 2018-06-06 04:01:03

您没有传递要标记为未读的邮件的ID。也可以将其传递给AJAX函数:

代码语言:javascript
复制
data: { check: UnreadMessage, id: YourVariableIDHere },
票数 0
EN

Stack Overflow用户

发布于 2018-06-06 05:50:39

如果在MessageController中使用POST方法,则将url更新为

地址:"@Url.Action("UpdateUnreadMessage","Message")“

票数 0
EN

Stack Overflow用户

发布于 2018-06-09 00:19:00

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

CSHTML:

代码语言:javascript
复制
<dd>@Html.CheckBoxFor(model => model.UnreadMessage, new { id = "UnreadCheckBox" })</dd>

脚本:

代码语言:javascript
复制
<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);
        },
    });
});

最后在控制器中:

代码语言:javascript
复制
        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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50707370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档