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); }
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)); } }
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); }
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))); }