public static MvcHtmlString CustomLabelFor <TModel, TValue>(this HtmlHelper <TModel> html, Expression <Func <TModel, TValue> > expression, object htmlAttributes)
        {
            var metadata          = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
            var resolvedLabelText = metadata.DisplayName ?? metadata.PropertyName;

            if (metadata.IsRequired)
            {
                resolvedLabelText += "*";
            }
            return(LabelExtensions.LabelFor <TModel, TValue>(html, expression, resolvedLabelText, htmlAttributes));
        }
        internal static string ObjectTemplate(HtmlHelper html, TemplateHelpers.TemplateHelperDelegate templateHelper)
        {
            ViewDataDictionary viewData      = html.ViewContext.ViewData;
            TemplateInfo       templateInfo  = viewData.TemplateInfo;
            ModelMetadata      modelMetadata = viewData.ModelMetadata;
            StringBuilder      builder       = new StringBuilder();

            if (templateInfo.TemplateDepth > 1)
            {
                if (modelMetadata.Model == null)
                {
                    return(modelMetadata.NullDisplayText);
                }

                // DDB #224751
                string text = modelMetadata.SimpleDisplayText;
                if (modelMetadata.HtmlEncode)
                {
                    text = html.Encode(text);
                }

                return(text);
            }

            foreach (ModelMetadata propertyMetadata in modelMetadata.Properties.Where(pm => ShouldShow(pm, templateInfo)))
            {
                if (!propertyMetadata.HideSurroundingHtml)
                {
                    string label = LabelExtensions.LabelHelper(html, propertyMetadata, propertyMetadata.PropertyName).ToHtmlString();
                    if (!String.IsNullOrEmpty(label))
                    {
                        builder.AppendFormat(CultureInfo.InvariantCulture, "<div class=\"editor-label\">{0}</div>\r\n", label);
                    }

                    builder.Append("<div class=\"editor-field\">");
                }

                builder.Append(templateHelper(html, propertyMetadata, propertyMetadata.PropertyName, null /* templateName */, DataBoundControlMode.Edit, null /* additionalViewData */));

                if (!propertyMetadata.HideSurroundingHtml)
                {
                    builder.Append(" ");
                    builder.Append(html.ValidationMessage(propertyMetadata.PropertyName));
                    builder.Append("</div>\r\n");
                }
            }

            return(builder.ToString());
        }
示例#3
0
        public static MvcHtmlString RequiredLabelFor <T, U>(this HtmlHelper <T> helper, Expression <Func <T, U> > expression, object htmlAttributes)
        {
            var metaData = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);

            string htmlFieldName = ExpressionHelper.GetExpressionText(expression);
            string labelText     = metaData.DisplayName
                                   ?? metaData.PropertyName
                                   ?? htmlFieldName.Split('.').Last();

            if (metaData.IsRequired)
            {
                labelText += "*";
            }

            return(LabelExtensions.LabelFor(helper, expression, labelText, htmlAttributes));
        }