using Microsoft.AspNetCore.Mvc.Rendering; namespace Kit.Helpers { public static class SystemWebMvcExtensions { /// /// Преобразует перечень объектов в перечень элементов html-списка /// /// Тип преобразуемого объекта /// Перечень преобразуемых объектов /// Функция, возвращающая значение, используемое в качестве Value для элемента списка. /// Для преобразования возвращаемого значения в строку вызывается стантартная реализация ToString() /// Функция, возвращающая значение, используемое в качестве Text для элемента списка. /// Для преобразования возвращаемого значения в строку вызывается стантартная реализация ToString() public static IEnumerable ToSelectList( this IEnumerable items, Func valueSelector, Func textSelector) { if (valueSelector == null) throw new ArgumentNullException("valueSelector"); if (textSelector == null) throw new ArgumentNullException("textSelector"); return items.Select(i => new SelectListItem { Value = valueSelector(i).ToString(), Text = textSelector(i).ToString() }); } /// /// Преобразует перечень объектов в перечень элементов html-списка /// /// Тип преобразуемого объекта /// Перечень преобразуемых объектов /// Функция, возвращающая значение, используемое в качестве Value для элемента списка. /// Функция, возвращающая значение, используемое в качестве Text для элемента списка. public static IEnumerable ToSelectList( this IEnumerable items, Func valueSelector, Func textSelector) { if (valueSelector == null) throw new ArgumentNullException("valueSelector"); if (textSelector == null) throw new ArgumentNullException("textSelector"); return items.Select(i => new SelectListItem { Value = valueSelector(i), Text = textSelector(i) }); } /// /// Преобразует перечень объектов в перечень элементов html-списка /// /// Тип преобразуемого объекта /// Перечень преобразуемых объектов /// Функция, возвращающая значение, используемое в качестве Value для элемента списка. /// Функция, возвращающая значение, используемое в качестве Text для элемента списка. /// Список значений, которые необходимо отметить в результирующем списке как выбранные. public static IEnumerable ToSelectList( this IEnumerable items, Func valueSelector, Func textSelector, Func disabled) { if (valueSelector == null) throw new ArgumentNullException("valueSelector"); if (textSelector == null) throw new ArgumentNullException("textSelector"); return items.Select(i => new SelectListItem { Value = (valueSelector(i) != null ? valueSelector(i).ToString() : string.Empty), Text = (textSelector(i) != null ? textSelector(i).ToString() : string.Empty), Selected = disabled(i) }); } /// /// Преобразует перечень объектов в перечень элементов html-списка /// /// Тип преобразуемого объекта /// Перечень преобразуемых объектов /// Функция, возвращающая значение, используемое в качестве Value для элемента списка. /// Функция, возвращающая значение, используемое в качестве Text для элемента списка. /// Список значений, которые необходимо отметить в результирующем списке как выбранные. public static IEnumerable ToSelectList( this IEnumerable items, Func valueSelector, Func textSelector, TValue selectedValue) { if (valueSelector == null) throw new ArgumentNullException("valueSelector"); if (textSelector == null) throw new ArgumentNullException("textSelector"); return items.Select(i => new SelectListItem { Value = (valueSelector(i) != null ? valueSelector(i).ToString() : string.Empty), Text = (textSelector(i) != null ? textSelector(i).ToString() : string.Empty), Selected = (selectedValue != null && selectedValue.Equals(valueSelector(i))) }); } /// /// Преобразует перечень объектов в перечень элементов html-списка /// /// Тип преобразуемого объекта /// Перечень преобразуемых объектов /// Функция, возвращающая значение, используемое в качестве Value для элемента списка. /// Функция, возвращающая значение, используемое в качестве Text для элемента списка. /// Список значений, которые необходимо отметить в результирующем списке как выбранные. public static IEnumerable ToSelectList( this IEnumerable items, Func valueSelector, Func textSelector, IEnumerable selectedValues) { if (valueSelector == null) throw new ArgumentNullException("valueSelector"); if (textSelector == null) throw new ArgumentNullException("textSelector"); return items.Select(i => new SelectListItem { Value = (valueSelector(i) != null ? valueSelector(i).ToString() : string.Empty), Text = (textSelector(i) != null ? textSelector(i).ToString() : string.Empty), Selected = selectedValues != null && selectedValues.Contains(valueSelector(i)) }); } } }