Может ли отображаемое имя (метка) для одного свойства меняться в зависимости от значения другого? - PullRequest
1 голос
/ 19 октября 2019

У меня есть эта модель представления:

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

Я хочу, чтобы отображаемое имя для ProjectEnd менялось в зависимости от значения ProjectType. ProjectType не является редактируемым пользователем полем, оно устанавливается только программно, в контроллере.

Я пробовал это:

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

... но ProjectType выдает эту компиляциюошибка времени:

Ссылка на объект требуется для нестатического поля, метода или свойства 'ProjectViewModel.ProjectType'

Возможно ли то, что я пытаюсь сделать? Конечно, я мог бы просто жестко закодировать метку в представлении, но я бы не хотел.

Другое, немного лучшее решение могло бы состоять в том, чтобы иметь два свойства DateTime и, в зависимости от значения ProjectType, просто покажите одно или другое в представлении.

1 Ответ

4 голосов
/ 19 октября 2019

Возможно ли то, что я пытаюсь?

NO.

Возможное решение

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

И затем в представлении используйте меткуПомощник HTML, который привязывается к Model.ProjectEndLabel

@model ProjectViewModel

<!-- ... -->

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