C# 当我从下拉列表中选择另一项时,我想刷新复选框

C# 当我从下拉列表中选择另一项时,我想刷新复选框,c#,jquery,ajax,razor,model-view-controller,C#,Jquery,Ajax,Razor,Model View Controller,基本上,我是在给用户分配角色。我想自动显示预分配的角色。我可以第一次渲染,但当下拉列表中的值更改时,复选框保持不变: type: "POST", dataType: "json", url: "/UserRoles/myaction", data: { "userid": DropDownSelectedVal }, success: function (data) { $.each(data, function (i, val) {

基本上,我是在给用户分配角色。我想自动显示预分配的角色。我可以第一次渲染,但当下拉列表中的值更改时,复选框保持不变:

    type: "POST",
    dataType: "json",
    url: "/UserRoles/myaction",
    data: { "userid": DropDownSelectedVal },
    success: function (data) {
        $.each(data, function (i, val) {
            var a = (data[i]);
            $("#" + a).attr('checked', true);
        });
    },

    error: function (error) {
        alert('error; ' + eval(error));
    }

})

您应该控制所有复选框。你可以试试这个

url: "/UserRoles/myaction",
data: { "userid": DropDownSelectedVal },
success: function (data) {
    $.each(data, function (i, val) {

        var a = (data[i]);
       if(!$("#" + a).is(":checked")) {

        $("#" + a).attr("checked", true);

            }else{
            $("#" + a).attr("checked", false);
             }
    });
},

首先,在选择更改事件下拉列表时,尝试使用以下代码清除所有复选框

            $('input:checkbox').removeAttr('checked');
然后运行ajax代码来选择新的用户角色

            type: "POST",
            dataType: "json",
            url: "/UserRoles/myaction",
            data: { "userid": DropDownSelectedVal },
            success: function (data) {
                $.each(data, function (i, val) {
                    $("#" + val).prop('checked', true);
                });
            },
            error: function (error) {
                alert('error; ' + eval(error));
            }


        })

我可以建议的一个优雅的解决方案是维护一个隐藏的输入来存储您选择的所有权限

你的HTML

<input type="hidden" id="_hiddenSelectedPermissions" value="2, 1" />
<input class="permissions" type="checkbox" value="1">Default Permission 1
<input class="permissions" type="checkbox" value="2">Default Permission 2
<input class="permissions" type="checkbox" value="3">Permission 3
<input class="permissions" type="checkbox" value="4">Permission 4
<input class="permissions" type="checkbox" value="5">Permission 5

你能提供更多的html代码片段并详细说明你想做什么吗。@Abdul Basit Rana:使用浏览器的开发者选项调试你的jquery代码,并试图找出你的$(“#”+a)代码是否给出了正确的元素指针。使用开发者选项的控制台窗口,并使用运行$(“#”+a)查看每个属性及其值 code@RandikaRatnayake你还想要什么???@Mohdemailsiddiqui我已经试过了。。是的,它给予了一切correctly@AbdulBasitRana:更改下拉列表时,您是否先清除了所有复选框,然后在成功时尝试选择新项目。也可以使用prop方法代替attrit,这不是一个解决方案。。我只是想在选择下一步时刷新或重置复选框值time@AbdulBasitRana:如果这对您有帮助,请将此标记为答案
function refreshSelectedPermissions() {
  $('input:checkbox.permissions').prop('checked', false);
  var selected = $('#_hiddenSelectedPermissions').val().split(",") || [];
  $('input:checkbox.permissions').each(function() {
    var value = $(this).val();
    if($.inArray(value, selected) === -1){  
      $(this).prop('checked', false);
    }
    else{
      $(this).prop('checked', true);
    }
  });
}