Javascript 使用Ajax-MVC将消息的状态从未读更新为已读
我正在尝试将每条消息的状态从未读更新为已读,当我单击列表中第一条消息的按钮时,更新状态将正常工作,但当我单击列表中第二条或第三条消息的按钮时,更新状态将不正常工作。谁能帮我一下,或者给我指出正确的方向! 提前感谢: 视图: 重复的id属性是无效的html,您的jQuery选择器IDMSG:$IDMSG.val等将只选择具有该id的第一个元素 在这种情况下,没有理由使用隐藏输入。相反,将这些值作为数据属性进行ad,然后在.click事件中读取,并为按钮使用类名而不是id 注意,我只包含了IDMSG,没有ChangeStu,因为您已经硬编码了该值Javascript 使用Ajax-MVC将消息的状态从未读更新为已读,javascript,c#,json,ajax,asp.net-mvc,Javascript,C#,Json,Ajax,Asp.net Mvc,我正在尝试将每条消息的状态从未读更新为已读,当我单击列表中第一条消息的按钮时,更新状态将正常工作,但当我单击列表中第二条或第三条消息的按钮时,更新状态将不正常工作。谁能帮我一下,或者给我指出正确的方向! 提前感谢: 视图: 重复的id属性是无效的html,您的jQuery选择器IDMSG:$IDMSG.val等将只选择具有该id的第一个元素 在这种情况下,没有理由使用隐藏输入。相反,将这些值作为数据属性进行ad,然后在.click事件中读取,并为按钮使用类名而不是id 注意,我只包含了IDMSG
<button data-id="@item.id" class="btn btn-sm btn-success btn-icon edit" data-toggle="collapse" data-target="#ShowMSG_@i></button>
重复的id属性是无效的html,您的jQuery选择器将只选择具有id的第一个项目。使用类名和相对选择器或更好的方法,只需删除隐藏的输入并将值分配给按钮的data-*属性,使用$this.data阅读。嗨@StephenMuecke:请给我第二条评论:谢谢,Stephen,工作正常:我只允许自己再问一个问题,我希望可以:现在状态将更改,但我需要刷新页面以查看更改,我能做些什么来查看更改而不刷新页面吗?!如果您正在进行ajax调用,那么刷新页面就没有意义了——您应该只在成功回调中更新DOM。您想要更新的是什么?我假设一件事是,一旦你点击按钮,如果你再次点击它,你就不会想调用数据库并再次保存它了?是的,我使用的是ajax,但除非我刷新页面,否则我看不到更改。我希望当用户进入页面时消息的更新状态为未读消息,当他们点击按钮时,消息将从未读状态更新为已读状态,并且当用户点击按钮展开消息时,您将其再次右键保存到数据库。但您要更新哪个元素?很抱歉,我猜不出您当前显示的代码。如果您只想更新这些代码,那么您的控制器方法只需要返回指示数据库已更新的true或false值,例如返回Jsontrue;。您可以指定一个类名,并使用一个相对选择器来更新文本,删除处理程序,以便忽略将来的单击。给我30分钟左右,我会更新答案
<script>
$(document).ready(function () {
$("#btnChangestu").click(function (e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "/Account/UpdateMSGStatus",
data: {
IDMSG: $("#IDMSG").val(),
ChangeStu: $("#ChangeStu").val()
},
dataType: 'json',
success: function (result) {
if (!$.trim(result)) {
alert("What follows is blank: ");
}
else {
result.ID = IDMSG;
result.MSGType = ChangeStu;
console.log("Send");
}
},
error: function () {
console.log('something went wrong - debug it!');
}
})
});
});
</script>
public JsonResult UpdateMSGStatus(int? IDMSG , string ChangeStu)
{
var u = db.Besked.Where(a => a.ID == IDMSG).FirstOrDefault();
if (u != null)
{
u.MSGType = ChangeStu;
u.ID = IDMSG;
db.SaveChanges();
}
return Json(u, JsonRequestBehavior.AllowGet);
}
<button data-id="@item.id" class="btn btn-sm btn-success btn-icon edit" data-toggle="collapse" data-target="#ShowMSG_@i></button>
$('.edit.).click(function (e) {
e.preventDefault();
// read the value
var id = $(this).data('id');
$.ajax({
type: "POST",
url: '@Url.Action("UpdateMSGStatus", "Account"), // don't hard code urls
data: {
IDMSG: id,
ChangeStu: 'Read Message'
},
dataType: 'json',
success: function (result) {