问题描述
在我的Telerik UI UI ASP.NET MVC网格中,我很难根据对象所基于的行的属性在行下拉列表中动态显示项目。因此,就目前而言,我只有十排不同的雇员,每列都有一列,其中包含与该雇员的公司相关的卡车下拉菜单。我可以理解为每个雇员的列下拉列表都将显示一个特定公司或所有公司的卡车,但是我未能成功将该下拉列表与卡车和代表该行的雇员相关的特定companyId关联起来
我试图实现这一点,以便在第1行中显示属于公司2的员工1,在其下拉列表中显示卡车a和b(db中的外键关系)。然后在第2行中显示属于公司1的员工2,在其下拉列表中显示卡车c和d(db中的外键关系)。
我想知道是否需要在与卡车相关的“ info.foreignkey”行中做一些不同的事情,因为我无法从我的控制器中获取与该特定行相关的员工属性,因此该控制器获取要显示在我的数据中的数据其他下拉菜单中显示的内容不够具体。
实现类似目标的兼职选择是显示每个员工的下拉菜单中的所有卡车,然后对“更新”进行某种类型的条件检查,以查看他们选择的卡车是否与公司绑定。
是否存在一种建议的方法来获取用户单击的同一行的其他列属性,以在列下拉列表中动态显示项目?
我将在下面发布一些与该问题有关的代码。
**网格代码,处理有问题的下拉列表的行是
info.ForeignKey(x => x.UserTruckId,(System.Collections.IEnumerable)ViewData["trucks"],"TruckId","TruckName").Title("Truck").Width(200).EditorTemplateName("GridForeignKey");
@(Html.Kendo().Grid(Model)
.Name("Grid")
.Pageable()
.sortable()
.Scrollable()
.Filterable()
.Columns(columns =>
{
columns.Bound(x => x.UserId);
columns.Group(group => group
.Title("Name")
.Columns(info =>
{
info.Bound(x => x.UserFirstName).Width(200);
info.Bound(x => x.UserLastName).Width(200);
}));
columns.Group(group => group
.Title("")
.Columns(info =>
{
info.Bound(x => x.UserIsActive).ClientTemplate("<input type='checkBox' #= UserIsActive ? checked='checked' :'' # />").Width(200);
info.Bound(x => x.UserEmail).Width(200);
info.ForeignKey(x => x.UserRoleId,(System.Collections.IEnumerable)ViewData["userRoleNames"],"RoleId","RoleName").Title("Role").Width(200).EditorTemplateName("GridForeignKey");
info.ForeignKey(x => x.UserTruckId,"TruckName").Title("Truck").Width(200).EditorTemplateName("GridForeignKey");
info.Bound(x => x.UserPassword).ClientTemplate(" <span>#: UserPassword == null ? ' ' : '●'.repeat( UserPassword.length) #</span>").EditorTemplateName("repeatpassword").Width(200);
info.Bound(x => x.UserUseCompanyAddress).ClientTemplate("<input type='checkBox' #= UserUseCompanyAddress ? checked='checked' :'' # />").Width(200);
}));
columns.Group(group => group
.Title("Shipping Address")
.Columns(info =>
{
info.Bound(x => x.Address1).Width(200);
info.Bound(x => x.Address2).Width(200);
info.Bound(x => x.UserCity).Width(200);
info.Bound(x => x.UserState).Width(200);
info.Bound(x => x.UserZipCode).Width(200);
}));
columns.Bound(x => x.UserCompanyId).Hidden(true);
columns.Bound(x => x.UserCreatedAt).Hidden(true);
columns.Bound(x => x.UserUpdatedAt).Hidden(true);
if (AppTimsUser.GetUserRoleLevel(AppTimsUser.LoggedInUser.UserRoleId) != 100)
{
columns.Bound(x => x.UserjsonConfig).Hidden(true);
}
else
{
columns.Bound(x => x.UserjsonConfig).Width(200);
}
columns.Command(command => { command.Edit(); }).Width(250);
})
.ToolBar(toolbar => toolbar.Create())
.Events(ev => ev.Save("onSave"))
.Editable(editable => editable.Mode(GridEditMode.InLine))
.DataSource(dataSource => dataSource.Ajax()
.Model(model =>
{
model.Id(user => user.UserId); // Specify the property which is the unique identifier of the model.
model.Field(user => user.UserId).Editable(false);// Make these properties not editable.
model.Field(user => user.UserCompanyId).Editable(false);
model.Field(user => user.UserUseCompanyAddress);
model.Field(user => user.UserCreatedAt).Editable(false);
model.Field(user => user.UserUpdatedAt).Editable(false);
if (UserRoleProvider.GetRoleLevelForUser(AppTimsUser.LoggedInUser.UserRoleId) < 100)
{
model.Field(user => user.UserjsonConfig).Editable(false);
}
if (UserRoleProvider.GetRoleLevelForUser(AppTimsUser.LoggedInUser.UserRoleId) <= 10)
{
model.Field(user => user.UserFirstName).Editable(false);
model.Field(user => user.UserLastName).Editable(false);
model.Field(user => user.UserIsActive).Editable(false);
model.Field(user => user.UserPassword).Editable(false);
model.Field(user => user.UserTruckId).Editable(false);
model.Field(user => user.UserEmail).Editable(false);
model.Field(user => user.UserRoleId).Editable(false);
model.Field(user => user.UserUseCompanyAddress).Editable(false);
model.Field(user => user.Address1).Editable(false);
model.Field(user => user.Address2).Editable(false);
model.Field(user => user.UserCity).Editable(false);
model.Field(user => user.UserState).Editable(false);
model.Field(user => user.UserZipCode).Editable(false);
}
})
.Read(read => read.Action("EditingInline_Read","ManageUsers"))
.Update(update => update.Action("EditingInline_Update","ManageUsers"))
.Create(update => update.Action("EditingInline_Create","ManageUsers"))
)
)
模板代码
@model object
@(Html.Kendo().DropDownListFor(m => m)
.BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"])
)
控制器代码
usersTrucksList = db.dbTrucks.Where(x => x.TruckCompanyId == AppTimsUser.LoggedInUser.UserCompanyId).Select(c => new TimsTruck
{
TruckId = c.TruckId,TruckCreatedAt = c.TruckCreatedAt,TruckUpdatedAt = c.TruckUpdatedAt,TruckCompanyId = c.TruckCompanyId,TruckName = c.TruckName,TruckIsActive = c.TruckIsActive,TruckTemplateId = c.TruckTemplateId
}).ToList();
highUsersTrucksList = db.dbTrucks.Select(c => new TimsTruck
{
TruckId = c.TruckId,TruckTemplateId = c.TruckTemplateId
}).ToList();
ViewData["trucks"] = usersTrucksList;
ViewData["trucksHighRole"] = highUsersTrucksList;
return View(model);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)