以下のループを使用して、ビューモデルの各プロパティのラベルとエディターをレンダリングしています。
@{
var properties = ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !pm.IsComplexType && !ViewData.TemplateInfo.Visited(pm));
}
@foreach (var prop in properties)
{
<li>
<div class="form-line">
@{
if (prop.HideSurroundingHtml)
{
@Html.Editor(prop.DisplayName ?? prop.PropertyName)
}
else
{
@Html.Label((prop.IsRequired ? "* " : "") + (prop.DisplayName ?? prop.PropertyName))
@Html.Editor(prop.PropertyName)
}
}
</div>
</li>
}
そしてモデル:
[Required]
[Display(Name = "Status")]
[UIHint("DropDown", "MVC", "SelectListName", "StatusSelectList")]
public Guid StatusId { get; set; }
[Required]
[Display(Name = "Emp Number")]
public string RefNum { get; set; }
[Required]
public string Surname { get; set; }
「Emp.No。」の表示名を使用すると、ラベルがまったく表示されません。「Emp.Number」の表示名を使用すると、「Number」ラベルのみが表示されます。ピリオドなしで「EmpNumber」の表示名を使用した場合にのみ、期待される完全なラベルがレンダリングされます。ここで何が起こっているのですか?