KnockoutJS与MVC Partialview

时间:2017-12-01 03:39:54

标签: asp.net-mvc knockout.js

我在MVC Partialview中保存来自KO observableArray的数据时遇到问题......

我有一个侧面导航菜单,其中一个节点是使用KOjs' foreach'动态构建的,此导航菜单应该在整个站点中保留。菜单在第一个View页面上呈现正常,但是当我在其他页面上导航(单击菜单选项或任何方式)时,动态节点为空,尽管observableArrays被提取并加载了正确的数据。

似乎导航菜单(部分视图)没有刷新/重新加载以再次渲染菜单节点/选项。

任何帮助非常感谢。 TIA!

self.reports = ko.observableArray([]);
self.reportCategories = ko.observableArray([]);

self.getReports = function () {
    App.Server.get("/.../reports/")
        .then(function (vm) {
            self.reports(vm.reports);
            self.reportCategories(vm.categories);
        });
};

self.init = function () {
    self.getReports();
};

self.init();


<li>
<a class="level1" data-toggle="collapse" href="#report-submenu" aria-expanded="false" aria-controls="collapseExample">Reports</a>
<ul class="level1 collapse" id="report-submenu" data-bind="foreach: reportCategories">
    <li>
        <a class="level2 collapse" data-toggle="collapse" data-bind="text: label, attr: { href: '#' + value }" 
            aria-expanded="false" aria-controls="collapseExample"></a>
        <ul class="level2 collapse" data-bind="foreach: reports, attr: { id: value }">
            <li data-bind="if: category == $parent.categoryId">
                <a class="level3" data-bind="text: menuName, attr: { href: reportName }"></a>
            </li>
        </ul>
    </li>

这是代码的另一部分(南希GET方法):

Get["/"] = _ =>
{
    var reportModel = new ReportModel();
    var reports = reportService.GetList();
    if (reports != null)
    {
        // Categories
        reportModel.Categories = reports.Select(s => s.Category).Distinct().Select(c => new ReportCategoryModel()
        {
            CategoryId = c,
            Label = c.TrimStart("Reports/".ToCharArray()),
            Value = c.ToLower().Replace('/', '-')
        }).ToList();

        // Reports
        reportModel.Reports = reports.Select(r => new ReportRecord()
        {
            MenuName = r.MenuName,
            ReportName = r.ReportName,
            Category = r.Category,
        }).ToList();
    }

    return Response.AsJson(reportModel);
};

0 个答案:

没有答案