Javascript 使用Ajax-MVC将消息的状态从未读更新为已读

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

我正在尝试将每条消息的状态从未读更新为已读,当我单击列表中第一条消息的按钮时,更新状态将正常工作,但当我单击列表中第二条或第三条消息的按钮时,更新状态将不正常工作。谁能帮我一下,或者给我指出正确的方向! 提前感谢:

视图:

重复的id属性是无效的html,您的jQuery选择器IDMSG:$IDMSG.val等将只选择具有该id的第一个元素

在这种情况下,没有理由使用隐藏输入。相反,将这些值作为数据属性进行ad,然后在.click事件中读取,并为按钮使用类名而不是id

注意,我只包含了IDMSG,没有ChangeStu,因为您已经硬编码了该值

<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) {