一个 属性 的显示名称(标签)可以根据另一个的值而改变吗?

Can the display name (label) for one property change depending on the value of another?

我有这个视图模型:

public class ProjectViewModel
{
    [Display(Name = "End date")]
    public DateTime ProjectEnd { get; set; }
    public string ProjectType { get; set; }
    // more properties
}

我希望根据 ProjectType 的值更改 ProjectEnd 的显示名称。 ProjectType 不是用户可编辑的字段,只能在控制器中以编程方式设置。

我试过这个:

[Display(Name = (ProjectType == "project"?"End date":"Due date"))]

... 但是 ProjectType 抛出这个编译时错误:

An object reference is required for the non-static field, method, or property 'ProjectViewModel.ProjectType'

我正在尝试的可能吗?我当然可以在视图中对标签进行硬编码,但我不想这样做。

另一个稍微好一点的解决方案是拥有两个 DateTime 属性,并根据 ProjectType 的值,在视图中只显示其中一个。

Is what I'm trying possible?

没有。

可能的解决方法

public class ProjectViewModel {    
    public string ProjectEndLabel => ProjectType == "project" ? "End date" : "Due date";
    public DateTime ProjectEnd { get; set; }
    public string ProjectType { get; set; }
    // more properties
}

然后在视图中使用绑定到 Model.ProjectEndLabel

的标签 HTML 助手
@model ProjectViewModel

<!-- ... -->

<label for="ProjectEnd">@Model.ProjectEndLabel</label>
<input asp-for="ProjectEnd" /> <br />