【问题标题】:Refresh Knockout ViewModel with Ajax in ASP.NET MVC在 ASP.NET MVC 中使用 Ajax 刷新 Knockout ViewModel
【发布时间】:2018-12-11 02:59:31
【问题描述】:

我有一个包含初始值的表。用户可以过滤表上的数据,并且表应该刷新。我无法通过淘汰赛做到这一点。

查看:

<tbody id="tblMultiEdit" data-bind="foreach: UUTs">
   <tr>
     <td data-bind="text: SerialNumber"></td>
     <td><input type="checkbox" data-bind="checked: (ReqDowngrade == 'Y' ? 1 : 0)" /></td>
  </tr>
</tbody>

查看模型:

function ViewModel(UUTs) {

   var self = this;
   self.UUTs = UUTs;
};

初始绑定:

var viewModel = new ViewModel(@Html.HtmlConvertToJson(Model));
ko.applyBindings(viewModel);

Ajax 调用以获取新表值:

function search() {
            $("#btnSearch").click(
                function () {
                    $('#image').hide()
                    $.ajax({
                        type: 'GET',
                        url: "@Url.Action("search", "UUTs")",
                        dataType: 'json',
                        data:
                            {
                                lab: $("#drpLab").val()
                            },
                        success: function (data) {

                            var viewModel = new ViewModel(data);    
                            ko.applyBindings(viewModel);

                        }, error: function (ex) {
                            toastr.error('Failed to retrieve search results, please check your network connection.' + ex)
                        }
                    })
                }
                )
        }

调试我可以看到Ajax调用成功方法的JSON数据。我必须做什么才能刷新数据?

【问题讨论】:

    标签: asp.net-mvc knockout.js


    【解决方案1】:

    首先将 UUT 声明为 observableArray,然后根据需要对其进行更新。 您应该更新要绑定的 observable 数组,而不是重新声明它。

    function ViewModel(UUTs) {
    
       var self = this;
       self.UUTs = ko.observableArray(UUTs);
    };
    

    所以在你的 ajax 成功回调中你应该这样做:

        success: function (data) {
                                    viewModel.UUTs(data); 
    // assuming data is an array. otherwise some mapping my be needed
    // reference to the same model, no new viewModel needed  
                                }
    

    【讨论】:

    • 它有效,但它只给了我一个价值。无论如何,我转向了另一种方法。谢谢。
    • 你确定成功回调中的“数据”包含一个数组吗?如果您需要更多帮助,请告诉我
    猜你喜欢
    • 2016-12-02
    • 2012-12-18
    • 2015-01-17
    • 2014-09-23
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多