ノックアウト MVC を使用しています。私のページでは、いくつかの部分ビューをレンダリングします。各部分ビューで、メインのサブモデルであるモデルを渡します。そして、「Uncaught Error: You cannot apply bindings multiple times to the same element.」というエラーが表示されます。ここにいくつかのコードがあります。
メインビュー
@using PerpetuumSoft.Knockout
@model UserPageViewModel
@{
var ko = Html.CreateKnockoutContext();
}
<div>
@Html.Partial("Controls/_PagePanel", Model.PanelViewModel)
</div>
@ko.Apply(Model)
ページ パネルの部分ビュー
@using PerpetuumSoft.Knockout
@model PagePanelViewModel
@{
var ko = Html.CreateKnockoutContext();
}
<div>
<div>
@foreach (var button in Model.Actions)
{
@ko.Html.Button(button.Id, button.ActionName, button.ControllerName, null, button.HtmlAttributes)
}
<a id="searchGridButton" class="btn" data-toggle="collapse" data-parent="#searchPanel" href="#accordionfilterContainer">Advanced search</a>
</div>
@Html.Partial("Controls/_AdvancedSearch", Model.AdvancedSearch)
</div>
@ko.Apply(Model)
詳細検索 部分表示
@using PerpetuumSoft.Knockout
@model AdvancedSearchViewModel
@{
var ko = Html.CreateKnockoutContext();
}
<div id="accordionfilterContainer" class="accordion-body collapse">
@using (ko.Html.Form(Model.ActionName, Model.ControllerName, null, new { id = "searchForm" }))
{
<div id="filterContainer" class="accordion-inner">
@using (var items = ko.Foreach(m => m.SearchCriteria))
{
<div style="display: inline-block">
<span @items.Bind.Text(m => m.Id)></span>
<br />
@items.Html.TextBox(m => m.Value, null)
</div>
}
<div style="display: inline-block">
<button type="submit" class = "@Model.HtmlAttributes">Apply filters</button>
</div>
</div>
}
</div>
@ko.Apply(Model)
モデル
public class UserPageViewModel
{
public List<User> Data { get; set; }
public PagePanelViewModel PanelViewModel { get; set; }
}
public class PagePanelViewModel
{
public IEnumerable<ButtonViewModel> FilterButtons { get; set; }
public AdvancedSearchViewModel AdvancedSearch { get; set; }
public IEnumerable<ButtonViewModel> Actions { get; set; }
}
public class AdvancedSearchViewModel
{
public IList<TextBoxViewModel> SearchCriteria { get; set; }
}
問題が @ko.Apply() 文字列にあることは理解していますが、その理由はわかりません。問題を解決する方法はありますか?