using Infrastructure.Web.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.ViewFeatures; using System; using System.Collections.Generic; using System.Linq.Expressions; namespace Infrastructure.Extensions { public static class ViewDataDictionaryExtensions { public static void AddIf(this ViewDataDictionary viewData, bool? condition, object name, object value) { if (condition.HasValue && condition.Value) { viewData.Add(name, value); } } public static void Add(this ViewDataDictionary viewData, object name, object value) { if (viewData is not null && name is not null) { viewData[name.ToString()] = value; } } public static object Get(this ViewDataDictionary viewData, object name) { if (viewData is null) { throw new ArgumentNullException(nameof(viewData)); } if (name is null) { throw new ArgumentNullException(nameof(name)); } return viewData[name.ToString()]; } public static void SelectList(this ViewDataDictionary viewData, Expression> expression, Func getSelectListFunc, bool value = true) { if (viewData is null) { throw new ArgumentNullException(nameof(viewData)); } if (expression is null) { throw new ArgumentNullException(nameof(expression)); } if (getSelectListFunc is null) { throw new ArgumentNullException(nameof(getSelectListFunc)); } if (value) { var name = (expression.Body as MemberExpression).Member.Name + "SelectList"; viewData[name] = getSelectListFunc(); } } public static void MultiSelectList(this ViewDataDictionary viewData, Expression> expression, Func getSelectListFunc, bool value = true) { if (viewData is null) { throw new ArgumentNullException(nameof(viewData)); } if (expression is null) { throw new ArgumentNullException(nameof(expression)); } if (getSelectListFunc is null) { throw new ArgumentNullException(nameof(getSelectListFunc)); } if (value) { var name = (expression.Body as MemberExpression).Member.Name + "SelectList"; if (!viewData.ContainsKey(name)) { viewData[name] = getSelectListFunc(); } } } public static void SelectList(this ViewDataDictionary viewData, Expression> expression, Func> getSelectListFunc, bool value = true) { if (viewData is null) { throw new ArgumentNullException(nameof(viewData)); } if (expression is null) { throw new ArgumentNullException(nameof(expression)); } if (getSelectListFunc is null) { throw new ArgumentNullException(nameof(getSelectListFunc)); } if (value) { var name = (expression.Body as MemberExpression).Member.Name + "AjaxSelectList"; viewData[name] = getSelectListFunc(); } } } }