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