在ASP.NET中使用EF对象绑定knockoutjs / mapping

时间:2017-09-01 18:12:23

标签: c# asp.net knockout.js knockout-mapping-plugin

我正在尝试使用来自EntityFramework后端的对象将select和table绑定到ASP.NET中的AJAX调用结果。
这是脚本:

cacerts

以下是视图:

<script type="text/javascript">
    function QuizListViewModel() {
        var self = this;
        self.quizList = ko.observableArray([]);
    }

    var qlvm = new QuizListViewModel();
    ko.applyBindings(qlvm);

    function FetchQuizzes() {

        $.getJSON(
            "/DesktopModules/personify/QuizAdminDos/API/QuizAdmin/QuizList",
            function (result) {
                var mapping = {
                    'observe': ["IdQuiz", "Name"]
                }
                parsedJsonQuizzes = jQuery.parseJSON(result);
                console.log(parsedJsonQuizzes);
                ko.mapping.fromJS(parsedJsonQuizzes, mapping, qlvm.quizList);
            });    
    }

    $(document).ready(function () {
        FetchQuizzes();
    });

</script>

我已通过调试验证我从JSON调用中获取了对象。我还验证了'quizList'observable在ko.mapping.fromJS调用之后有值。但是,我的选择中没有显示任何内容。我甚至没有获得“optionsCaption”值。

我是否可以直接绑定到EF对象(从DB生成)?这是从parsedJsonQuizzes的console.log输出返回的内容:

enter image description here 并且为了完全公开,这就是我从AJAX调用中返回对象的方式:

<select data-bind="options: quizList,
                   optionsText: function(quiz) { return quiz.Name() + '(Id: ' + quiz.IdQuiz() + ')'},
                   optionsCaption: 'Select a quiz...'"></select>

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为您需要将applyBindings的调用移至$(documnent).ready函数中,以便在尝试绑定之前确保已加载DOM。