显示警报存储在ViewModel中的值

时间:2014-03-10 19:51:02

标签: asp.net-mvc-4 viewmodel knockout-3.0

我的应用程序在viewModel中有很多项目,我希望看到这些值显示在警告框中,以便我可以看到实际存储在那里的内容。当试图将此视图模型传递回我的控制器时,我没有看到任何值,而是我收到错误“viewModel”未定义。

以下是我的视图模型脚本

的示例
$(document).ready(function () {
    function ViewModel() {

        var self = this;

        self.SectionId = ko.observable("");
        self.SectionName = ko.observable("");

        var SectionNames = {
            Id: self.SectionId,
            Name: self.SectionName
        };

        self.selectedSectionName = ko.observable();
        self.SectionNames = ko.observableArray();

        // Initialize the view-model for Work Sections
        $.ajax({
            url: '@Url.Action("GetSections", "Home")',
            cache: false,
            type: 'GET',
            contentType: 'application/json; charset=utf-8',
            data: {},
            success: function (data) {
                self.SectionNames(data);
            }
        });

    var viewModel = new ViewModel();
    ko.applyBindings(viewModel);     
});

与创建全局变量或类级变量类似,我希望此viewModel包含所有可观察项的所有当前值。

1 个答案:

答案 0 :(得分:0)

除了缺少结束标记(如@CSharper所述),您的代码将抛出您所说的错误。您的问题的答案可能在于缺少结束标记,或者在未显示的另一段代码中。

通过将代码(+结束标记)与$.ajax存根混合,您可以检查以下内容:



$.ajax = function() {}; // Noop stub.

$(document).ready(function () {
    function ViewModel() {

        var self = this;

        self.SectionId = ko.observable("");
        self.SectionName = ko.observable("");

        var SectionNames = {
            Id: self.SectionId,
            Name: self.SectionName
        };

        self.selectedSectionName = ko.observable();
        self.SectionNames = ko.observableArray();

        // Initialize the view-model for Work Sections
        $.ajax({
            url: '@Url.Action("GetSections", "Home")',
            cache: false,
            type: 'GET',
            contentType: 'application/json; charset=utf-8',
            data: {},
            success: function (data) {
                self.SectionNames(data);
            }
        });
    }
      
    var viewModel = new ViewModel();
    ko.applyBindings(viewModel);     
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
$root = <code data-bind="text: ko.toJSON($root)"></code><br />
No errors on console.
&#13;
&#13;
&#13;