【问题标题】:Update List Model with Ajax ASP .NET MVC5使用 Ajax ASP .NET MVC5 更新列表模型
【发布时间】:2020-11-30 13:33:52
【问题描述】:

在页面中调用 Action Result whit ajax 后,有人可以提示我如何将列表从控制器传递到视图页面中的模型列表。 (意思是用ajax回调结果更新当前列表模型)?

这是我的默认加载视图页面代码:

@model List<ChargeSystem.Models.Message>
@foreach (var item in Model)
    {
        <div class="container1">
                <p>@item.Msg</p>
                <span class="time-right">@item.MsgDate</span>
            </div>
    }

</div>
<div class="divContinMsg">
    <input type="text" id="txtMsg" name="txtMsg" />
</div>
<script type="text/javascript">
    $(document).ready(function () {
        $("#txtMsg").keyup(function (e) {
            if (e.keyCode == 13) {
                $.ajax(
                    {
                        url: '/User/ajaxContactAdmin?msg=' + $("#txtMsg").val(),
                        type: 'Post',
                        data: "",
                        contentType: false,
                        success: function (result) {
                        //What can i do????
                        },
                        error: function () {
                            alert("error");
                        }
                    })
            };
        });
    });
</script>

这是 Ajax 调用操作结果:

 public ActionResult ajaxContactAdmin(string msg)
        {
            var result = new { model = messageRepository.Select().ToList()};
            return Json(result, JsonRequestBehavior.AllowGet);
        }

那么,ajax 回调后如何刷新模型?

【问题讨论】:

  • result 里面有什么?也添加它。

标签: javascript jquery ajax asp.net-mvc asp.net-core


【解决方案1】:

所以你要做的就是将结果附加到现有的结果集中。

首先我会添加一个容器以便于参考,其次您会将项目添加到容器中:

@model List<ChargeSystem.Models.Message>
<div id="listContainer">
  @foreach (var item in Model)
    {
        <div class="container1">
                <p>@item.Msg</p>
                <span class="time-right">@item.MsgDate</span>
            </div>
    }
  </div>
</div>
<div class="divContinMsg">
    <input type="text" id="txtMsg" name="txtMsg" />
</div>
<script type="text/javascript">
    $(document).ready(function () {
        $("#txtMsg").keyup(function (e) {
            if (e.keyCode == 13) {
                $.ajax(
                    {
                        url: '/User/ajaxContactAdmin?msg=' + $("#txtMsg").val(),
                        type: 'Post',
                        data: "",
                        contentType: false,
                        success: function (result) {
                         $('#listContainer').append('<div class="container1">'+
                             '<p>' + result.Msg + '</p>'+
                             '<span class="time-right">' + result.MsgDate +'</span>'+
                             '</div>');
                        },
                        error: function () {
                            alert("error");
                        }
                    })
            };
        });
    });
</script>

【讨论】:

    【解决方案2】:

    您似乎想在文本框中输入信息并在视图中保存和更新。 我认为你可以做到这一点。

    这是一个例子:

    你的控制器:

    public IActionResult GetUser ()
            {
                var messages = context.Messages.ToList();
                return View(messages);
            } 
            [HttpPost]
            public IActionResult ajaxContactAdmin(string msg)
            {
                var message = new Message
                {
                    Msg = msg,
                    MsgDate = DateTime.Now
                };
                context.Add(message);
                context.SaveChanges();
                return Json(message);
    
            }
    

    你的观点中的 Js:

    @section scripts{ 
        <script>
            $(document).ready(function () {
                $("#txtMsg").keyup(function (e) {
                    if (e.keyCode == 13) {
                        var msg = document.getElementById("txtMsg").value
                        $.ajax(
                            {
                                url: '/Home/ajaxContactAdmin?msg=' + $("#txtMsg").val(),
                                type: 'Post',
                                data: { "msg": msg},
                                contentType: false,
                                success: function (message)
                                {
                                    console.log(message);
                                    window.location.reload();
                                },
                                error: function () {
                                    alert("error");
                                }
                            })
                    };
                });
            });
        </script>
    }
    

    结果展示:

    【讨论】:

    • 你不应该在成功时重新加载
    • 谢谢亲爱的,但是 location.reload();不是实时变化。它看起来像服务器端响应。
    猜你喜欢
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2019-10-03
    • 2015-01-28
    • 2017-04-18
    • 2021-03-03
    相关资源
    最近更新 更多