【问题标题】:Updating Status of Message From unread to read using Ajax - MVC使用 Ajax - MVC 将消息的状态从未读更新为已读
【发布时间】:2018-07-31 10:04:20
【问题描述】:

我正在尝试将每条消息的状态从未读更新为已读,当我单击列表中第一条消息的按钮时,更新状态将起作用,但是当我单击列表中第二条或第三条消息的按钮时,更新状态状态不工作。谁能帮助我或指出正确的方向!

在此先感谢:)

查看:

 <div class="content">
    @{ int i = 0;}
    foreach (var item in Model.Comment_Lists.GroupBy(l => l.MSG).Select(g => .First()))    {
            if (item.se == "Kunde")
            {
              <div  class="bs-callout bs-callout-success">
              <div class="col-xs-3 text-right">
              <button data-toggle="collapse"  data-target="#ShowMSG_@i" id="btnChangestu" class="btn btn-sm btn-success btn-icon"></button></div>
              <span class="text-muted"><small> @item.Date.ToString("dd/MMMM/yyy")</small></span><br />
              <span class="text-muted"><small> @item.MSGType</small></span>
              <input type="hidden" name="IDMSG" id="IDMSG" value="@item.id" />
              <input type="hidden" name="ChangeStu" id="ChangeStu" value="Read Message" />
              <div class="collapse" id="ShowMSG_@i">
                  <p><span>@item.MSG </span></p>
              </div>
              </div>
              }
                i++;
           }
         </div>

JavaScript:

<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);
}

【问题讨论】:

  • 重复的id属性是无效的html,你的jQuery选择器只会选择第一个带有id的项目。使用类名和相对选择器
  • 或者更好,只是删除隐藏的输入并将值分配给按钮的data-*属性,然后使用$(this).data(...)读取它们
  • 嗨@StephenMuecke :) 请给我你的第二个 cmets 的前任 :) 提前谢谢 :)

标签: javascript c# json ajax asp.net-mvc


【解决方案1】:

重复的 id 属性是无效的 html,并且您的 jQuery 选择器(IDMSG: $("#IDMSG").val() 等)只会选择带有 id 的第一个元素。

在这种情况下没有理由使用隐藏输入。相反,将值作为data 属性广告,然后在.click() 事件中读取,并为按钮使用class 名称而不是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>

那么脚本就变成了

$('.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) {    

【讨论】:

  • 感谢斯蒂芬,它工作正常 :) 我只是允许自己再问一个问题,我希望它没问题 :) 现在状态会改变,但我应该刷新页面以查看变化,有什么我可以在不刷新页面的情况下查看更改?!
  • 如果您正在进行 ajax 调用,那么刷新页面是没有意义的——您应该只是在成功回调中更新 DOM。你想更新什么? (我假设一件事是,一旦您单击按钮,如果再次单击它,您就不想调用数据库并再次保存它?)
  • 是的,我正在使用 ajax,但除非我刷新页面,否则我看不到更改。我想要更新消息的状态(当用户进入页面状态是未读味精时,当他们点击按钮时,它会将状态从未读更新为已读),并且当用户点击按钮展开味精时,您将再次保存到数据库.
  • 但是您要更新哪个元素? (抱歉,我猜不出您的代码当前显示的内容)
  • 如果这就是您想要更新的全部内容,那么您的控制器方法只需要返回一个truefalse 值(表示数据库已更新 - 例如return Json(true);。您给&lt;span&gt; class 名称并使用相对选择器来更新文本,并删除处理程序以便忽略未来的点击。给我 30 分钟左右,我会更新答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 2019-09-13
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
相关资源
最近更新 更多