如何修改LabelFor上显示必填字段星号? [英] How can I modify LabelFor to display an asterisk on required fields?
本文介绍了如何修改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屋!
查看全文