public static MvcHtmlString EnumDisplayFor <TModel, TValue>(this HtmlHelper <TModel> html, Expression <Func <TModel, TValue> > expression) { var propertyInfo = MemberExpressionHelper.GetPropertyInfo(expression); Type enumType = null; if (propertyInfo.PropertyType.IsEnum) { enumType = propertyInfo.PropertyType; } else { var attributes = propertyInfo.GetCustomAttributes(typeof(EnumDataTypeAttribute), true); if (attributes == null || attributes.Length == 0) { throw new Exception("cannot resolve enum type"); } enumType = (attributes[0] as EnumDataTypeAttribute).EnumType; if (enumType == null) { throw new Exception("cannot resolve enum type"); } } var model = (html.ViewContext.View as WebViewPage).Model; var modelValue = propertyInfo.GetValue(model, null); if (modelValue == null) { return(new MvcHtmlString("")); } return(new MvcHtmlString(EnumHelper.GetText((int)modelValue, enumType))); }
public void GetMemberTypeTest() { var memberHelper = new MemberExpressionHelper(); Expression <Func <User, bool> > expression = user => user.IsActive == true; Assert.AreEqual(typeof(bool), memberHelper.GetMemberType(expression.Body.MaybeAs <BinaryExpression>().Bind(c => c.Left).GetOrDefault(null))); expression = user => user.IsActive; var t = expression.Body.MaybeAs <MemberExpression>().GetOrDefault(null); Assert.AreEqual(typeof(bool), memberHelper.GetMemberType(t)); }
private string ReplaceParameters(string msg) { var getters = MemberExpressionHelper.GetMembersFunctions <T>(_waitCondition); foreach (var getter in getters) { var value = getter.Getter(ActuallyValue); var pattern = getter.Key; var target = $"{pattern}({GetValuePattern(value)})"; Regex regex = new(pattern); var result = regex.Replace(msg, target); msg = result; } return(msg); }
public void GetMemberNameTest() { var memberHelper = new MemberExpressionHelper(); Expression <Func <User, bool> > expression = user => user.IsActive == true; Assert.AreEqual("IsActive", memberHelper.GetMemberName(expression.Body.MaybeAs <BinaryExpression>().Bind(c => c.Left).GetOrDefault(null))); expression = user => user.IsActive; Assert.AreEqual("IsActive", memberHelper.GetMemberName(expression.Body.MaybeAs <MemberExpression>().GetOrDefault(null))); expression = user => user.IsActive.Equals(true); Assert.AreEqual("IsActive", memberHelper.GetMemberName(expression.Body.MaybeAs <MethodCallExpression>().Bind(c => c.Object).GetOrDefault(null))); expression = user => user.Credentials.Password == "123"; Assert.AreEqual("Password", memberHelper.GetMemberName(expression.Body.MaybeAs <BinaryExpression>().Bind(c => c.Left).GetOrDefault(null))); expression = user => user.Credentials != null; Assert.AreEqual("Credentials", memberHelper.GetMemberName(expression.Body.MaybeAs <BinaryExpression>().Bind(c => c.Left).GetOrDefault(null))); }