Asp.net mvc 单击复选框以使用MVC时更改DB值
这是我关于SO的第一个问题,请发发善心。我正在做一个项目,使邮件可以标记为未读。当用户单击详细信息时,它将消息标记为已读,但我尝试使用复选框来允许用户将消息标记为未读。这是我在深入研究后的尝试。当我返回主视图时,我似乎无法将消息标记为未读 以下是in Details.cshtml中的复选框:Asp.net mvc 单击复选框以使用MVC时更改DB值,asp.net-mvc,http-post,checkboxfor,Asp.net Mvc,Http Post,Checkboxfor,这是我关于SO的第一个问题,请发发善心。我正在做一个项目,使邮件可以标记为未读。当用户单击详细信息时,它将消息标记为已读,但我尝试使用复选框来允许用户将消息标记为未读。这是我在深入研究后的尝试。当我返回主视图时,我似乎无法将消息标记为未读 以下是in Details.cshtml中的复选框: <dd> @Html.CheckBoxFor(model => model.UnreadMessage, new { onclick = "UpdateUnreadMessage
<dd>
@Html.CheckBoxFor(model => model.UnreadMessage, new { onclick = "UpdateUnreadMessage(this)" })
</dd>
有人能帮我找出我做错了什么吗?非常感谢。您没有传递要标记为未读的邮件的ID。也将其传递给AJAX函数:
data: { check: UnreadMessage, id: YourVariableIDHere },
如果在MessageController中使用POST方法,则将url更新为
url:@url.Action(“UpdateUnreadMessage”,“Message”)因此我能够解决发生的问题。我确实需要通过ID。这是我如何让它工作的 CSHTML:
<dd>@Html.CheckBoxFor(model => model.UnreadMessage, new { id = "UnreadCheckBox" })</dd>
谢谢大家的帮助和建议。谢谢,但这似乎也不起作用。在用户单击复选框之前,我的代码似乎正在命中AJAX函数。抛出了什么错误?嘿,实际上没有抛出任何错误。它从不点击POST函数。虽然,我认为@prabhu379实际上已经解决了下面的问题。我想你也需要像@willy david jr指出的那样通过id。
data: { check: UnreadMessage, id: YourVariableIDHere },
<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");
}