C# 组合框/下拉框数据更新后未更新
一个很长的解释,但我相信这是一个相当简单的问题。我想我遗漏了什么 从下拉菜单中选择用户角色后,我将使用ajax将该角色的部分视图加载到一个DIV中:C# 组合框/下拉框数据更新后未更新,c#,javascript,jquery,ajax,model-view-controller,C#,Javascript,Jquery,Ajax,Model View Controller,一个很长的解释,但我相信这是一个相当简单的问题。我想我遗漏了什么 从下拉菜单中选择用户角色后,我将使用ajax将该角色的部分视图加载到一个DIV中: $.ajax({ type: 'post', data: { id: roleId}, url: '@Url.Action("Manage","User")', success: function (data) { $("#user-manage
$.ajax({
type: 'post',
data: { id: roleId},
url: '@Url.Action("Manage","User")',
success: function (data) {
$("#user-manage").html(data);
}
});
现在,在页面上有一个带有用户列表的组合框和一个删除按钮。
我突出显示一个用户,按下删除按钮,用户被删除
太好了!它可以工作,但是我的问题是,在刷新页面之前,被删除的用户不会从组合框列表中消失。我无法刷新页面,因为这意味着网站用户必须重新选择角色
所以,问题是,我如何能让用户在我点击删除按钮后立即消失在组合框中
现在,当按下delete按钮时,所选用户ID被传递到以下ajax调用,该调用删除所选用户并返回更新的JSON用户列表:
function removeUser() {
var selectedUser = $("#user-combo").find(":selected").val(); //grab selected user
var selectedForRole = $("#role-id").val(); //hidden field to store selected role
$.ajax({
url:"/User/Delete", //Delete selected user and return updated Json list
data: { id: selectedUser , roleId: selectedForRole },
type: 'post',
success: function (data) {
var userList = $("#user-combo");
var listContent;
$.each(data, function (index, item) {
listContent += "<option value='" + item.Id + "'>" + item.Name + "</option>";
});
userList.html(listContent);
}
});
}
就这么简单:
$("#comboBox option[value='USER-NAME']").remove();
将其放入removeUser()
中。功能
事实上,该函数不能从远程列表中删除用户,也不能从DOM中删除用户。
请参阅此帮助。检查您的回调函数。逻辑似乎是正确的。我刚刚测试并替换select的html将删除旧项目并添加新项目。这是一个例子 在成功回调函数中添加几个console.log()调用。控制台日志(数据);log(userList);日志(listContent)并查看它们是否包含正确的数据。。。或者他们是否被处决
另一个可能的原因是检查服务器上的角色扮演者列表。它可能包含已删除的用户-即,如果您将其从缓存中而不是从数据库中拉出,或者在加载列表后确实删除了该用户。您是否在代码中从组合框中删除过该选项?我返回到组合框的集合已删除该记录,因此我假设这样做。html([更新的集合])是否应使用更新的数据替换comobox元素?我错了吗?如果数据是从服务器正确发送的,我会错的。您是否将数据作为json编码的对象返回?是的,我返回json编码的anonnymouse类型。请参阅底部的modified OP。因此,没有办法真正绑定combobox,以便在返回JSON集合更改时对其进行更新?我必须使用[Combobox].remove()手动删除客户端上的Combobox元素?是的,当然有办法,但您应该使用一些框架,如backbone.js(还有其他框架,但这确实是最先进的)。通常,使用这种基于MVC(模型、视图、控制器)模型的javascript框架,您会有一个元素集合。从集合中删除元素时,它会自动刷新并重新呈现客户端(无需重新加载页面)。如果你想知道更多,我建议从这个链接开始
$("#comboBox option[value='USER-NAME']").remove();