如何修改LabelFor上显示必填字段星号? [英] How can I modify LabelFor to display an asterisk on required fields?

查看:1141
本文介绍了如何修改LabelFor上显示必填字段星号?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个的HtmlHelper 的扩展方法,让我来创建一个 LabelFor 属性显示星号之后,如果它是一个必填字段。我该怎么做?

 公共类Foo
{
    [需要]
    公共字符串名称{;组; }
}Html.LabelFor(O => o.Name)//名字*


解决方案

下面是一个的博客文章描述如何做到这一点。

要给你一个小例子从上面的网站修改(注意 - 我还没有编译/测试这一点):

 命名空间赫尔prequest.Controllers.Helpers
{
   公共静态类LabelExtensions
    {
        公共静态MvcHtmlString标签(这HTML的HtmlHelper,串前pression,字符串ID =,布尔generatedId = FALSE)
        {
            返回LabelHelper(HTML,ModelMetadata.FromStringEx pression(如pression,html.ViewData),前pression,ID,generatedId);
        }        【超级pressMessage(Microsoft.Design,CA1006:DoNotNestGenericTypesInMemberSignatures,理由=这是泛型类型的适当筑巢)]
        公共静态MvcHtmlString LabelFor<的TModel,TValue>(此的HtmlHelper<的TModel> HTML,防爆pression< Func键<的TModel,TValue>>前pression,字符串ID =,布尔generatedId = FALSE)
        {
            返回LabelHelper(HTML,ModelMetadata.FromLambdaEx pression(如pression,html.ViewData),防爆pressionHelper.GetEx pressionText(如pression),身份证,generatedId);
        }        内部静态MvcHtmlString LabelHelper(HTML的HtmlHelper,ModelMetadata元,串htmlFieldName,字符串ID,布尔generatedId)
        {
            字符串LabelText的= metadata.DisplayName? metadata.PropertyName? htmlFieldName.Split('。')最后()。
            如果(String.IsNullOrEmpty(LabelText的))
            {
                返回MvcHtmlString.Empty;
            }
            VAR SB =新的StringBuilder();
            sb.Append(LabelText的);
            如果(metadata.IsRequired)
                sb.Append(*);            var标记=新TagBuilder(标签);
            如果(!string.IsNullOrWhiteSpace(ID))
            {
                tag.Attributes.Add(ID,身份证);
            }
            否则,如果(generatedId)
            {
                tag.Attributes.Add(ID,html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)+_label);
            }            tag.Attributes.Add(代表,html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName));
            tag.SetInnerText(sb.ToString());            返回MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
        }
    }
}

I want to create an extension method for HtmlHelper that allows me to create a LabelFor a property display an asterisk after it if it is a required field. How can I do that?

public class Foo
{
    [Required]
    public string Name { get; set; }
}

Html.LabelFor(o => o.Name) // Name*

解决方案

Here is an blog post that describes how to do this.

To give you a small example modified from the site above (note - I have not compiled/tested this):

namespace HelpRequest.Controllers.Helpers
{
   public static class LabelExtensions
    {
        public static MvcHtmlString Label(this HtmlHelper html, string expression, string id = "", bool generatedId = false)
        {
            return LabelHelper(html, ModelMetadata.FromStringExpression(expression, html.ViewData), expression, id, generatedId);
        }

        [SuppressMessage("Microsoft.Design", "CA1006:DoNotNestGenericTypesInMemberSignatures", Justification = "This is an appropriate nesting of generic types")]
        public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string id = "", bool generatedId = false)
        {
            return LabelHelper(html, ModelMetadata.FromLambdaExpression(expression, html.ViewData), ExpressionHelper.GetExpressionText(expression), id, generatedId);
        }

        internal static MvcHtmlString LabelHelper(HtmlHelper html, ModelMetadata metadata, string htmlFieldName, string id, bool generatedId)
        {
            string labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last();
            if (String.IsNullOrEmpty(labelText))
            {
                return MvcHtmlString.Empty;
            }
            var sb = new StringBuilder();
            sb.Append(labelText);
            if (metadata.IsRequired)
                sb.Append("*");

            var tag = new TagBuilder("label");
            if (!string.IsNullOrWhiteSpace(id))
            {
                tag.Attributes.Add("id", id);
            }
            else if (generatedId)
            {
                tag.Attributes.Add("id", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName) + "_Label");
            }

            tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName));
            tag.SetInnerText(sb.ToString());

            return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
        }
    }
}

这篇关于如何修改LabelFor上显示必填字段星号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆