我正在构建一个MVC 4应用程序。我有一个名为OrganisationId的字段,这是强制性的。
@Html.LabelFor(m => m.OrganisationId)
我需要在标签之后放置一个asterix,该字段是必需的。 如何访问LabelFor模板?它们存放在哪里?我如何创建自己的?
由于
答案 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) + " " + labelText;
}
return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
}
然后就像这样使用:
@Html.LabelForX(x => x.YourRequieredField)
我为我的新LabelFor
更改了所有LabelForX
...所以,如果我的Model / ViewModel属性有[Required],它将使用<abbr>
显示“*”标签
我创建了一个CSS类“labelRequired”,它应用于标签和“*”,因此您可以设置与正常标签不同的已设置标签的样式。