在ASP.NET MVC中使用Ajax刷新Knockout ViewModel

时间:2018-07-02 21:00:52

标签: asp.net-mvc knockout.js

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

查看:

<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数据。我该怎么做才能刷新数据?

1 个答案:

答案 0 :(得分:0)

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

  <xsl:template match="xsd:element">
         <xsl:element name="xsd:element">
            <xsl:attribute name="name">balisesXrm</xsl:attribute>
            <xsl:attribute name="type">t:balisesXrmType</xsl:attribute>
        </xsl:element>
     <xsl:copy>
        <xsl:if test="not(parent::xsd:schema)">
            <!-- ... on ajoute les maxOccurs ...-->
            <xsl:attribute name="maxOccurs">unbounded</xsl:attribute>
        </xsl:if>
        <!-- ... on ajoute  l'attributeGroup "attributsXrm" en ref ...-->
        <xsl:attribute name="ref">attributsXrm</xsl:attribute>
        <!-- ... on copie tout en ne touchant pas au maxOccurs (pas besoin de spécifier ref pcq aussi là) -->
        <xsl:apply-templates select="node()| @*[not(name() = 'maxOccurs')]" />
    </xsl:copy>

因此,在ajax成功回调中,您应该执行以下操作:

def receivers(self):
    return ('adam', 'tom', 'mel')

for receiver in email.receivers():
    print('we send email from'.capitalize(), self.sender, 'to', receiver.title(), 'and the subject is',
          self.subject, 'finally the massage is', self.message)