0

我不确定这是淘汰赛问题、JSON 问题还是其他问题,所以我将全部解释一下。

我有一个显示许多用户的 Web 网格。我可以使用 AJAX 弹出窗口编辑这些成员。作为此窗口的一部分,我可以将角色分配给特定用户。如下图所示:

这些角色是从下拉菜单中选择的,如果我想为一个用户应用多个角色,我可以添加额外的下拉菜单。我使用淘汰赛的 foreach 绑定来做到这一点。

现在,在我点击保存后,所有浏览器中的 webgrid 列都会自动更新。但是,如果我编辑一个用户并给他们额外的角色,然后点击保存,然后尝试再次编辑它们,他们新添加的角色不会显示在 IE 中。但是,Chrome 和 Firefox 可以完美运行。

当我单击此弹出窗口上的“保存”按钮时,使用以下代码将数据作为 JSON 发送到服务器:

 $.ajax({
                    type: 'POST',
                    dataType: 'json',
                    url: '/Person/Save',
                    dataType: 'html',
                    data: JSON.stringify(jsonObj),
                    contentType: 'application/json; charset=utf-8',
                    success: function(data) {
                        dlg.dialog("close");
                        $('#myUserGrid').html(data);
                    },
                    error: function(data) {
                        console.debug(data);
                    }
                }); 

弹出窗口视图中的相关 html 和敲除代码如下:

<tr>
        <td class="roleList" colspan="2">
            <table data-bind="foreach: RoleDdList">
                <tr>
                    <td class="label">
                        * Role:
                    </td>
                    <td>
                        <select data-bind="options: $root.Roles, value: $data.role, optionsValue:'Id', optionsText:'Name'"> <!--,optionsCaption: 'No Role' -->
                        </select>
                    </td>
                    </tr>
                <tr>
                    <td></td>
                    <td><a href="#" data-bind="click: $root.deleteRole, visible: $index()!=0">Delete Role</a></td>
                </tr>
            </table>
        </td>
        <tr></tr>

ViewModel 中有很多代码,但相关的部分是

 var Role = function(roleId, roleName) {
    this.Id = roleId;
    this.Name = roleName;
};

// Class to represent a row in the Roles DropDown List
function RoleDropDown(initialRole) {
    var self = this;
    self.role = ko.observable(initialRole);
    }

$(function () {

    function myViewModel() {
        var self = this;

//code relating to other fields

// Role Code
        self.Roles = new ko.observableArray();
        @{
            foreach (var pair in Model.RolesList)
            {
                @:self.Roles.push(new Role(@pair.Key,"@pair.Value"));
            }
        }


        // List of Role DropDowns
        self.RoleDdList = ko.observableArray([
                new RoleDropDown(self.Roles()[0])
            ]);


        // Add a Role (code for link on form)
        self.addRole = function() {
            self.RoleDdList.push(new RoleDropDown(self.Roles()[0]));
        };

        // Delete a Role
        self.deleteRole = function(num) {
            self.RoleDdList.remove(num);
        };

        //
        @{
            if(@Model.Roles!=null)
            {

                @:self.RoleDdList.pop();

                foreach (var selectedRole in Model.RoleNumbers)
                {
                    @:self.RoleDdList.push(new RoleDropDown(@selectedRole));
                }
            }
        }



    }

    vm = new myViewModel();
    ko.applyBindings(vm);
    $.validator.unobtrusive.parse('#formUser');


});

关于这个问题的根源是什么的任何想法?

4

0 回答 0