예제 #1
0
        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)));
        }
예제 #2
0
        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));
        }
예제 #3
0
        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);
        }
예제 #4
0
        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)));
        }