0

以下のループを使用して、ビューモデルの各プロパティのラベルとエディターをレンダリングしています。

@{
    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」の表示名を使用した場合にのみ、期待される完全なラベルがレンダリングされます。ここで何が起こっているのですか?

4

1 に答える 1

1

Html.Labelヘルパーの誤ったオーバーロードを使用しています。for最初の引数は、ラベルの属性が対応する入力フィールドを指すようにエディターを指す式を表します。2番目の引数を使用すると、ラベルテキストを設定できます。このようにしてみてください:

@Html.Label(prop.PropertyName, (prop.IsRequired ? "* " : "") + (prop.DisplayName ?? prop.PropertyName))
于 2012-03-26T06:04:22.317 に答える