【问题标题】:KnockoutJs in ASP.net MVC4 with Razor带有 Razor 的 ASP.net MVC4 中的 KnockoutJs
【发布时间】:2014-01-14 07:24:13
【问题描述】:

我正在尝试将我的 MVC 应用程序转换为使用 knockoutjs,我的视图中有此代码:

var itemsCount = 0;
<div class="boxes-container">
@foreach (ItemModel i in Model.Items)
{
   if (itemsCount >= Model.DisplayCount)
   {
      @Html.Raw("</div><div class='boxes-container'>")
      itemsCount = 0;
   }
   Html.RenderPartial("PartialItemView", i);
   itemsCount++;
}
</div>

现在,通过淘汰赛我有这样的东西

this.Items = ko.observableArray(tmp.Items); // [Object { field1="52", field2="56", arr=[1], more...},Object { field1="52", field2="56", arr=[1], more...},Object { field1="52", field2="56", arr=[1], more...}]
this.DisplayCount = ko.observable(tmp.DisplayCount) // 3

如何使用这些数据更新我的第一个代码?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 razor knockout.js


    【解决方案1】:

    在关闭 body-tag 之前添加到您的视图中:

    <script type="text/javascript">
        // our model data
    
        var data = @Html.Raw(JsonConvert.SerializeObject(Model));
    
        // start knockout
    
        var model = ko.mapping.fromJS(data);
        ko.applyBindings(model);
    </script>
    

    然后您可以使用带有剔除的模型来迭代每个项目:

    <div data-bind="foreach: Items">
        ...
    </div>
    

    确保通过包管理器添加对 NewtonSoft.Json 的引用:

    PM> install-package Newtonsoft.Json
    

    【讨论】:

    • 谢谢,我已经这样做了,并且 Items 有值,但是在 foreach 中我必须这样做 Html.RenderPartial("PartialItemView", i);其中“i”是作为项目出现的局部视图的模型...... ???
    • 理想情况下,您应该在 AJAX 请求中请求数据,而不是将其嵌入到页面中。
    • @b1tsh1ft 你能解释一下原因吗?
    • @RomanPushkin 这样您就可以将模型(或数据)与视图分离。 (关注点分离)。此外,如果您有一个返回您的项目的服务器端函数,您可以从您喜欢的任何页面调用该函数并在任何您喜欢的地方重新使用它。出于性能原因,现在您的页面将需要更长的时间让用户加载。如果页面不包含任何数据、加载、然后执行 AJAX(异步),它将创建更快的用户体验。
    • @b1tsh1ft 多打一个电话怎么能更快?请记住,它只会在文档准备好时启动。分居?嗯。其实不是模型,这个数据是视图模型,所以没关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2018-04-23
    • 2015-04-10
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多