如何为LabelFor助手添加一个asterix?

时间:2014-04-07 04:25:55

标签: c# asp.net-mvc-3 asp.net-mvc-4

我正在构建一个MVC 4应用程序。我有一个名为OrganisationId的字段,这是强制性的。

@Html.LabelFor(m => m.OrganisationId)

我需要在标签之后放置一个asterix,该字段是必需的。 如何访问LabelFor模板?它们存放在哪里?我如何创建自己的?

由于

2 个答案:

答案 0 :(得分:0)

在您的模型上使用数据注释

  [Required]
  [UIHint("RequiredTemplate")]//this does the trick which should match the file name.
  [Display(Name="Organization Id")]
  public string Name { get; set; }

在Views / Shared / DisplayTemplates中删除一个新文件夹 创建一个新的PARTIAL VIEW RequiredTemplate.cshtml。

<font style="color:Red">*</font>@Html.LabelFor(m => m)

在您的视图中,组织应使用DisplayFor

  <div class="display-field">
     @Html.DisplayFor(m => m.Name)
 </div>

答案 1 :(得分:0)

我创建了一个HTML扩展程序:

public static MvcHtmlString LabelForX<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string requiredText = "required", string innerText = "*" )
{
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
    string htmlFieldName = ExpressionHelper.GetExpressionText(expression);
    string labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last();
    if (String.IsNullOrEmpty(labelText))
    {
        return MvcHtmlString.Empty;
    }

    var tag = new TagBuilder("label");
    tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName));
    tag.SetInnerText(labelText);

    if (metadata.IsRequired)
    {
        var span = new TagBuilder("abbr");
        span.Attributes.Add("title", requiredText);
        span.Attributes.Add("class", "labelRequired");
        span.SetInnerText(innerText);
        tag.Attributes.Add("class", "labelRequired");
        tag.InnerHtml = span.ToString(TagRenderMode.Normal) + "&nbsp;" + labelText;
    }
    return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal)); 
}

然后就像这样使用:

@Html.LabelForX(x => x.YourRequieredField)

我为我的新LabelFor更改了所有LabelForX ...所以,如果我的Model / ViewModel属性有[Required],它将使用<abbr>显示“*”标签

我创建了一个CSS类“labelRequired”,它应用于标签和“*”,因此您可以设置与正常标签不同的已设置标签的样式。