Изменить значение БД при нажатии на CheckBox для использования MVC
Это мой первый вопрос о SO, поэтому, пожалуйста, имейте сердце. Я работаю над проектом, чтобы сообщения могли быть помечены как непрочитанные. Когда пользователь нажимает на детали, он помечает сообщение как прочитанное, но я пытаюсь использовать CheckBoxFor, чтобы позволить пользователю пометить сообщение как непрочитанное. Вот моя попытка после тщательного исследования. Кажется, я не могу получить сообщение, которое будет помечено как непрочитанное, когда я вернусь к основному виду.
Вот CheckBoxFor в Details.cshtml:
<dd>
@Html.CheckBoxFor(model => model.UnreadMessage, new { onclick = "UpdateUnreadMessage(this)" })
</dd>
И вызов jQuery для определения статуса CheckBoxFor:
<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>
А вот метод POST в MessageController:
// 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();
}
Может кто-нибудь, пожалуйста, помогите мне понять, что я делаю неправильно? Я очень ценю это.
3 ответа
Если метод POST в MessageController, тогда обновите URL как
url: "@ Url.Action (" UpdateUnreadMessage ","Message")"
Вы не передали идентификатор сообщения, которое хотите пометить как непрочитанное. Передайте его на вашу AJAX-функцию:
data: { check: UnreadMessage, id: YourVariableIDHere },
Так что я смог решить, что происходит. Мне нужно было пройти через удостоверение личности. Вот как я смог заставить его работать.
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");
}
Спасибо всем за вашу помощь и предложения.