1. ホーム
  2. c#

[解決済み] DisplayNameFor() From List<Object> in Model

2023-03-14 12:24:12

Question

I believe this is pretty simple, I just can't seem to find the right way to show the display name for an item within a list within my model.

My simplified model:

public class PersonViewModel
{
    public long ID { get; set; }
    
    private List<PersonNameViewModel> names = new List<PersonNameViewModel>();

    [Display(Name = "Names")]
    public List<PersonNameViewModel> Names { get { return names; } set { names = value; } }      
}

and Names:

public class PersonNameViewModel
{
    public long ID { get; set; }

    [Display(Name = "Set Primary")]
    public bool IsPrimary { get; set; }

    [Display(Name = "Full Name")]
    public string FullName { get; set; }
}

Now I'd like to make a table to show all the names for a person, and get the DisplayNameFor FullName . Obviously,

@Html.DisplayNameFor(model => model.Names.FullName);

wouldn't work, and

@Html.DisplayNameFor(model => model.Names[0].FullName);  

は、名前がない場合は壊れます。 ここで表示名を取得するための「最適な方法」はありますか?

どのように解決するのですか?

これは実際に、リストに項目がなくても動作します。

@Html.DisplayNameFor(model => model.Names[0].FullName)

これは、MVCが実際に式を実行するのではなく、式を解析しているからです。これにより、リストに要素がなくても、適切なプロパティと属性を見つけることができます。

注目すべきは、パラメータ ( model 上記) を使用する必要すらありません。これも動作します。

@Html.DisplayNameFor(dummy => Model.Names[0].FullName)

このように

@{ Namespace.Of.PersonNameViewModel dummyModel = null; }
@Html.DisplayNameFor(dummyParam => dummyModel.FullName)