为什么无法发布观察结果?

时间:2015-01-19 14:04:51

标签: javascript jquery asp.net-mvc knockout.js

我在html中有一个select2选项。

AddPermission.cshtml

          <div class="control-group">
                <label class="control-label">
                    Parent Permission:</label>
                <div class="controls">
                    <select id="ParentPermission" name="ParentPermission" class="large m-wrap" data-bind='options: permissions, optionsText: "permissionName", optionsValue: "id", optionsCaption: "Seçiniz...", value: parentId, select2: { }'>
                    </select>
                </div>
            </div>
            <div class="control-group">
                <label class="control-label">
                    Permission Name:</label>
                <div class="controls">
                    <input class="m-wrap large" type="text" id="PermissionName" name="PermissionName"
                        data-bind="value: permissionName" />
                </div>
            </div>
            <div class="form-actions">
                <button class="btn blue" data-bind="click: savePermission">
                    <i class="icon-ok"></i>Save</button>
            </div>

我的淘汰javascript文件中有一些observable,其中一个是parentId。

PermissionModel.js

  return function () {

        var self = this;
        self.id = ko.observable(0);
        self.permissionName = ko.observable("");
        self.parentId = ko.observable("");
        self.permissions = ko.observableArray([]);

        self.clearModel = function () {
            self.id(0);
            self.permissionName("");
            self.parentId("");
        }

        self.savePermission = function () {
            console.log(self.parentId() + self.permissionName());
            webRequest.postJSON("/Administration/Permission/AddPermission", ko.toJSON(self), self.savePermissionSucceeded);
        }

        self.getPermissions = function () {
        webRequest.postSingle("/Administration/Permission/GetAllPermissions", null, self.getPermissionsSucceeded);
    }
}

在加载页面之前,我调用 getPermissions 函数将我的所有权限加载到select2选项菜单。它运作成功。我可以在 getPermission 之后调用 getPermissionsSucceeded 函数,

PermissionModel.js

    self.getPermissionsSucceeded = function (result) {

    self.permissions.removeAll();
    var dataLength = result.length;
    for (var i = 0; i < dataLength; i++) {
        var data = result[i];
        var permission = new PermissionSearchResultModel(data.Id, data.Name, data.ParentId)
        self.permissions.push(permission);
    }

PermissionSearchResultModel.js

function PermissionSearchResultModel(Id, PermissionName, ParentId) {
        var self = this;
        self.id = Id;
        console.log(self.id);
        self.permissionName = PermissionName;
        self.parentId = ParentId;
    }

然后我写一个权限名称并从列表中选择一个父权限值。它们都必须从淘汰javascript文件中的 savePermissions 函数发布到服务器。

PermissionController.cs

        [HttpPost]
        public ActionResult AddPermission(PermissionModel model)
        {
            Permission permission = PermissionService.AddPermission(model.Id, model.PermissionName, model.ParentId);

            if (permission.Id != 0)
            {
                return Json(true);
            }
            else
            {
                return new JsonNetResult() { Data = new { Error = true, Messages = new[] { new { Message = "Bu yetki önceden kayıt edilmiş." } } } };
            }

        }

PermissionService.cs

public static Permission AddPermission(int id, string permissionName, int parentId)
        {
            GenericRepository<Permission> permissionRepository = new GenericRepository<Permission>();
            Permission tempPermission = permissionRepository.First(d => d.Name == permissionName && d.ParentId == parentId);

            if (tempPermission == null)
            {
                tempPermission = new Permission();
                tempPermission.Name = permissionName;
                tempPermission.ParentId = parentId;
                permissionRepository.Add(tempPermission);
                return tempPermission;
            }

            return new Permission();
        }

当我检查firebug时,我注意到parentId observable值无法发布到服务器,所以即使它有parentId值,也会在没有parentId的情况下向db添加新记录。其他可观察的内容可以发布。

0 个答案:

没有答案