【问题标题】:Problems using the Razor model when creating my knockout ViewModel创建淘汰赛 ViewModel 时使用 Razor 模型的问题
【发布时间】:2013-07-02 04:57:35
【问题描述】:

在设置淘汰赛 VM 时,我在 javascript 调用中使用模型时遇到问题..

@model List<AdminGui.Models.Domain>

<script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
function ViewModel() {
    var self = this;

    self.domains = ko.observableArray(
        ko.utils.arrayMap(@Model, function(item) {
            return new Domain(item.guid, item.description, item.namespaces);
        }));
}

我在 ko.utils.arrayMap 调用中的 @Model 上遇到语法错误。我怀疑可能是我的剃须刀缺少... :)

【问题讨论】:

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


    【解决方案1】:

    Model 是您的 C# 模型,不能直接从 JavaScript 中使用,因为编写 @Model 只是在其上调用 ToString,这不是您需要的。

    您需要将模型转换为 JSON,您可以使用 Json.Encode 方法完成此操作

    self.domains = ko.observableArray(
            ko.utils.arrayMap(@Html.Raw(Json.Encode(Model)), function(item) {
                return new Domain(item.guid, item.description, item.namespaces);
            }));
    

    注意:您需要用Html.Raw 包裹它以关闭 Razor 中的自动 HTML 编码。

    【讨论】:

    • 我强烈建议不要使用内联 Javascript 或使用 Razor 引擎来内联呈现 JSON。为了获得更好、更易于维护和可测试的解决方案,将视图模型移动到与其包含的模型同名的 js 文件(每个模型一个文件),请使用 MVC4 捆绑来引用页面上的脚本。然后使用 ASP.NET WebApi 从服务器获取 JSON 数据
    猜你喜欢
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2013-01-09
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多