【问题标题】:Change DB value when clicking on CheckBoxFor using MVC使用 MVC 单击 CheckBoxFor 时更改 DB 值
【发布时间】:2018-06-05 19:12:13
【问题描述】:

这是我关于 SO 的第一个问题,所以请放心。我正在做一个项目,使消息能够被标记为未读。当用户点击 details 时,它会将邮件标记为已读,但我正在尝试使用 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();
}

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

【问题讨论】:

  • 抛出什么错误?
  • Heimi -- 实际上没有抛出任何错误。它永远不会达到 POST 功能。虽然,我认为@prabhu379 实际上已经解决了这个问题。
  • 我猜你还需要像@willy david jr 指出的那样传递 id。

标签: asp.net-mvc http-post checkboxfor


【解决方案1】:

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

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

【讨论】:

  • 谢谢,但这似乎也不起作用。在用户单击复选框之前,我的代码似乎正在点击 AJAX 功能。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    所以我能够解决正在发生的事情。我确实需要通过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");
        }
    

    感谢大家的帮助和建议。

    【讨论】:

      猜你喜欢
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多