Я создаю компонент Роли/Разрешения для своего приложения. Моя точка зрения Роли модель выглядит следующим образом:DropDownListFor Composite Key со значением Столбец
public class RoleView
{
public int Id { get; set; }
public ApplicationWithPermissionsView Application { get; set; }
public List<RolePermissionView> Permissions { get; set; }
public IEnumerable<KeyValuePair<string, int>> PermissionValues
{
get
{
return EnumHelper.ToList<PermissionValue>();
}
}
[Required]
public string Name { get; set; }
}
RolePermission вид модель выглядит следующим образом:
public class RolePermissionView
{
public int PermissionId { get; set; }
public int RoleId { get; set; }
public PermissionValue Value { get; set; }
}
PermissionValue является перечислением, которое имеет член NotSet, Allow, Deny и сохраняет целочисленное значение в база данных.
Если я перехожу на страницу редактирования роли, я показываю список категорий разрешений, каждый из которых имеет список разрешений с соответствующими значениями (RolePermission) для каждого разрешения для этой роли. Как вы можете видеть, RolePermissionView имеет составные ключи (PermissionId, RoleId).
Как создать раскрывающийся список, который отображает список возможных значений разрешений и выбирает правильное значение разрешения для этого конкретного разрешения?
Следующее генерирует выпадающие списки, но не выбирает никаких значений. Кроме того, не дает каждому раскрывающемуся списку уникальное имя или идентификатор, поэтому привязка определенно не будет работать. Я предполагаю, что если позже переместить это в Шаблон редактора, у них будет уникальность.
@foreach (var permission in category.Permissions)
{
<tr>
<td>@permission.Description</td>
<td>@Html.DropDownListFor(m => m.Permissions.Find(p => p.PermissionId == permission.Id).PermissionValue, new SelectList(Model.PermissionValues, "Value", "Key"))</td>
</tr>
}
Спасибо за ответ. Я смотрел на подобный подход. Следует отметить, что category.Permissions просто представляет собой список разрешений для определенной категории. Model.Permissions - это список PermissionRoles (составных клавиш) для роли. Таким образом, вышеизложенное не будет работать для меня. KeyValuePair был потому, что я генерировал более полезный список из перечисления. – getoutofmylaboratory
Играется с этим немного и, по крайней мере, отображает значения, дает уникальные имена и выбирает выбранное значение (хотя мне пришлось заполнить третий параметр «objectSelected» в SelectList). На данный момент я назову это победой. – getoutofmylaboratory