C# 无法正确绑定Kendo Multi Select以读取和写入多对多剃须刀模型
我在一个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是相当基本的 我还没有包括所有的模型,它们并不相关,但它们都有效 这是视图中的调用: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
@(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,
});
}
}