一个 属性 的显示名称(标签)可以根据另一个的值而改变吗?
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 />
我有这个视图模型:
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
@model ProjectViewModel
<!-- ... -->
<label for="ProjectEnd">@Model.ProjectEndLabel</label>
<input asp-for="ProjectEnd" /> <br />