这是我关于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();
}
有人能帮我找出我做错了什么吗?我非常感谢。
发布于 2018-06-06 04:01:03
您没有传递要标记为未读的邮件的ID。也可以将其传递给AJAX函数:
data: { check: UnreadMessage, id: YourVariableIDHere },
发布于 2018-06-06 05:50:39
如果在MessageController中使用POST方法,则将url更新为
地址:"@Url.Action("UpdateUnreadMessage","Message")“
发布于 2018-06-09 00:19:00
所以我能够解决正在发生的事情。我确实需要通过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");
}
感谢大家的帮助和建议。
https://stackoverflow.com/questions/50707370
复制相似问题