我不确定这是淘汰赛问题、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');
});
关于这个问题的根源是什么的任何想法?