Ejemplo n.º 1
0
        private AngularTagBuilder CreateTagBuilder <TProperty>(Expression <Func <TModel, TProperty> > expression, string tagName, IDictionary <string, object> htmlAttributes, ModelMetadata metadata)
        {
            var tagBuilder = new AngularTagBuilder(tagName);
            IEnumerable <ValidationRule> rules = null;

            if (expression != null)
            {
                var expressionText = ExpressionHelper.GetExpressionText(expression);
                var propertyName   = GetPropertyIdentifier(expressionText);
                var nodeName       = GetElementIdentifier(expressionText);

                tagBuilder.MergeAttribute("id", nodeName, true);
                tagBuilder.MergeAttribute("name", propertyName, true);
                tagBuilder.MergeAttribute("ng-model", propertyName, true);

                if (metadata != null)
                {
                    rules = GetValidationRules(metadata);
                }
            }

            tagBuilder.MergeAttributes(htmlAttributes, true);
            if (rules != null)
            {
                foreach (var attr in rules.SelectMany(r => r.ValidationParameters))
                {
                    tagBuilder.Attributes[attr.Value.Name] = Convert.ToString(attr.Value.Value);
                }
            }
            //tagBuilder.MergeAttributes(extra is IDictionary<string, object> ? (IDictionary<string, object>)extra : HtmlHelper.AnonymousObjectToHtmlAttributes(extra), true);

            return(tagBuilder);
        }
Ejemplo n.º 2
0
        private static AngularTagBuilder CreateValidationTagBuilder(ValidationRule rule, string nodeName, bool onDirtyOnly, IDictionary <string, object> htmlAttributes)
        {
            var tagBuilder = new AngularTagBuilder("span");

            tagBuilder.Attributes["class"] = AngularConfiguration.HelpCssClass;

            string ngShow = string.Empty;

            if (rule.ValidationParameters.Any())
            {
                var validations = rule.ValidationParameters.Select(kvp => string.Format("{0}.$error.{1}", nodeName, kvp.Key));
                ngShow += string.Format("({0})", string.Join(" || ", validations));

                if (onDirtyOnly)
                {
                    ngShow += string.Format(" && {0}.$dirty", nodeName);
                }
            }

            tagBuilder.Attributes["ng-show"] = ngShow.TrimEnd(' ');
            tagBuilder.MergeAttributes(htmlAttributes, true);

            tagBuilder.SetInnerText(rule.ErrorMessage);
            return(tagBuilder);
        }
Ejemplo n.º 3
0
        internal void Initialize()
        {
            var tagBuilder = new AngularTagBuilder(TagName);

            tagBuilder.Attributes["id"]   = Name;
            tagBuilder.Attributes["name"] = Name;

            if (IsNgForm)
            {
                tagBuilder.Attributes["ng-form"] = string.Empty;
            }
            else
            {
                tagBuilder.Attributes["ng-submit"]    = string.Format("{0}({1})", SubmitMethod, Name);
                tagBuilder.Attributes["method"]       = "POST";
                tagBuilder.Attributes["novalidate"]   = string.Empty;
                tagBuilder.Attributes["autocomplete"] = "off";
            }

            tagBuilder.MergeAttributes(_htmlAttributes, true);

            if (_render)
            {
                _helper.ViewContext.Writer.Write(tagBuilder.ToString(TagRenderMode.StartTag));
            }
        }
Ejemplo n.º 4
0
        public IHtmlString Label <TProperty>(Expression <Func <TModel, TProperty> > expression, IDictionary <string, object> htmlAttributes)
        {
            var    metadata    = ModelMetadata.FromLambdaExpression(expression, _helper.ViewData);
            string displayName = metadata.DisplayName ?? metadata.PropertyName;

            var tagBuilder = new AngularTagBuilder("label");

            tagBuilder.Attributes["class"] = AngularConfiguration.LabelCssClass;

            var expressionText = ExpressionHelper.GetExpressionText(expression);
            var nodeName       = GetElementIdentifier(expressionText);

            tagBuilder.MergeAttribute("for", nodeName);

            tagBuilder.SetInnerText(displayName);

            tagBuilder.MergeAttributes(htmlAttributes, true);

            return(new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal)));
        }
Ejemplo n.º 5
0
        public IHtmlString Dropdown <TProperty>(Expression <Func <TModel, TProperty> > expression, string ngOptions, string emptyElementText, IDictionary <string, object> htmlAttributes)
        {
            var metadata   = ModelMetadata.FromLambdaExpression(expression, _helper.ViewData);
            var tagBuilder = CreateTagBuilder(expression, "select", htmlAttributes, metadata);

            if (!string.IsNullOrEmpty(ngOptions))
            {
                tagBuilder.Attributes["ng-options"] = ngOptions;
            }

            if (!string.IsNullOrEmpty(emptyElementText))
            {
                var option = new AngularTagBuilder("option");
                option.Attributes["value"] = string.Empty;
                option.SetInnerText(emptyElementText);
                tagBuilder.InnerHtml = option.ToString(TagRenderMode.Normal);
            }

            return(new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal)));
        }