在MVC局部视图中无法多次应用绑定

时间:2015-02-27 12:43:01

标签: asp.net-mvc knockout.js asp.net-mvc-partialview

您有一个父页面,其中我使用了敲除js将模型与html元素绑定。

现在我做一个ajax调用来接收一个partialviewresult,我将它放在div conbtainer中。

如果使用内置的mvc模型绑定,一切正常。

但是当我在局部视野中去淘汰时。我在MVC局部视图中多次敲除了错误无法应用绑定。

我甚至尝试过使用

ko.applybindings(new vm(),document.getelementbyId("div1"))
ko.applybindings(new vm1(),document.getelementbyId("div2"))

但仍然得到同样的错误。是否无法从动作方法获取局部视图结果并在局部视图中使用knockout?我不想在我的父页面中隐藏div并得到一个JsonResult并将其绑定到我的div元素。

1 个答案:

答案 0 :(得分:1)

如果您有以下(一般布局):

<div id="parent">
  content
  <div id="partialTarget"></div>
</div>

并且您已经将绑定应用于#parent,您必须在再次应用viewmodel之前清除#partialTarget。 #partialTarget已经从第一遍开始绑定,因此要将绑定应用于加载的内容,您需要执行以下操作:

var reapplyBindings = function(element){
    var vm = ko.dataFor(element);
    if( vm ) {
        ko.cleanNode(element);
        ko.applyBindings(vm, element);
    }
};

element.load(‘path/to/fragment.html’, function() {
    //the [0] selector is needed to be sure we have an actual dom element, not the jQuery wrapper
    reapplyBindings(element[0]); 
    //do whatever you’re already doing
});