C# 无法正确绑定Kendo Multi Select以读取和写入多对多剃须刀模型

C# 无法正确绑定Kendo Multi Select以读取和写入多对多剃须刀模型,c#,razor,many-to-many,razor-pages,kendo-multiselect,C#,Razor,Many To Many,Razor Pages,Kendo Multiselect,我在一个razor页面项目中有一个多对多关系,该项目将角色UserRoles与应用程序连接起来,以获得更大项目中的权限。我正试图获得一个剑道多选控件,通过该模型读取和写入数据库。我可以使用复选框,但是条目太多,我需要使用multiselect下拉列表。我无法从Telerik获得任何帮助,除了硬编码阵列数据显示和不保存,这是没有用的。我需要从数据库中读取和写入赋值 下面的代码基本上显示了我正在尝试执行的操作: selectedRoles需要是从数据库中选择RoleID的数组或整数列表。 在下面的P

我在一个razor页面项目中有一个多对多关系,该项目将角色UserRoles与应用程序连接起来,以获得更大项目中的权限。我正试图获得一个剑道多选控件,通过该模型读取和写入数据库。我可以使用复选框,但是条目太多,我需要使用multiselect下拉列表。我无法从Telerik获得任何帮助,除了硬编码阵列数据显示和不保存,这是没有用的。我需要从数据库中读取和写入赋值

下面的代码基本上显示了我正在尝试执行的操作: selectedRoles需要是从数据库中选择RoleID的数组或整数列表。 在下面的PopulatesSignedApproleData中,他们正在正确读取AssignedApproledCatalist,其中它调用Assigned=appRoles.Containsrole.ID。但是,selectedRoles需要调整大小,以便在我循环连接表时接受新的RoleID

在我知道公共int[]selectedRoles需要保存多少个整数后,我不确定在何处或如何声明它,或者我是否需要使用一个可以动态调整大小的列表或枚举,或者我是否需要一个计数器,然后是另一个空值来填充循环的重复,或者……:

selectedRoles.Append role.ID;不起作用

public void updateAppProlesFlivereTryContext上下文, 字符串[]selectedRoles,应用程序应用程序更新 如果要保存到数据库,工作正常,我只需要填充数组或列表,以填充下拉列表中的选定值

谢谢你的帮助,我的C是相当基本的

我还没有包括所有的模型,它们并不相关,但它们都有效

这是视图中的调用:

@(Html.Kendo().MultiSelectFor(m=>m.selectedRoles)
                        .Placeholder("Select ...")
                        .DataTextField("Role")
                        .DataValueField("RoleID")
                        .BindTo(Model.AssignedAppRoleDataList)
这些是页面模型中的调用:UpdateAppProles工作正常

public int[] selectedRoles = new int[] {};      

public void PopulateAssignedAppRoleData(FliveRetryContext context, App app)
        {
            var allRoles = context.Role;
            var appRoles = new HashSet<int>(
                app.RoleAppJoins.Select(c => c.RoleID));
            AssignedAppRoleDataList = new List<AssignedAppRoleData>();
            foreach (var role in allRoles)
            {
                AssignedAppRoleDataList.Add(new AssignedAppRoleData
                {
                    RoleID = role.ID,
                    Role = role.RoleName,
                    Assigned = appRoles.Contains(role.ID)

            });
                //This is where I need to append or count, but I don't know the syntax
        if (appRoles.Contains(role.ID))
            {
             selectedRoles.Append (role.ID);
        }
        }


        }

public void UpdateAppRoles(FliveRetryContext context,
            string[] selectedRoles, App appToUpdate)
        {
            if (selectedRoles == null)
            {
                appToUpdate.RoleAppJoins = new List<RoleAppJoin>();
                return;
            }

            var selectedRolesHS = new HashSet<string>(selectedRoles);
            var appRoles = new HashSet<int>
                (appToUpdate.RoleAppJoins.Select(c => c.Role.ID));
            foreach (var role in context.Role)
            {
                if (selectedRolesHS.Contains(role.ID.ToString()))
                {
                    if (!appRoles.Contains(role.ID))
                    {
                        appToUpdate.RoleAppJoins.Add(
                            new RoleAppJoin
                            {
                                AppID = appToUpdate.ID,
                                RoleID = role.ID
                            });
                    }
                }
                else
                {
                    if (appRoles.Contains(role.ID))
                    {
                        RoleAppJoin roleToRemove
                            = appToUpdate
                                .RoleAppJoins
                                .SingleOrDefault(i => i.RoleID == role.ID);
                        context.Remove(roleToRemove);
                    }
                }
            }
        }


感谢所有考虑过这一点的人,但我成功了

添加了一个新类:

    public class SelectedAppRoles
    {
        public int RoleID { get; set; }
    }
然后是一个新的列表

        public List<SelectedAppRoles> selectedRoles;
foreach (var role in allRoles)
            {
                AssignedAppRoleDataList.Add(new AssignedAppRoleData
                {
                    RoleID = role.ID,
                    Role = role.RoleName,
                    Assigned = appRoles.Contains(role.ID)

                });

                if (appRoles.Contains(role.ID))
                {
                    selectedRoles.Add(new SelectedAppRoles
                    {
                        RoleID = role.ID,
                    });                 
                }
            }