Динамически изменять атрибут DataType в ASP. NET MVC - PullRequest
1 голос
/ 04 февраля 2020

У меня есть ViewModel, содержащая это свойство:

[Display(Name = "Email")]        
[DataType(DataType.EmailAddress)]        
[DisplayFormat(NullDisplayText = "Unavailable")]        
public string Email { get; set; }

Есть ли способ динамически установить атрибут DataType, чтобы он отображался как DataType.Text, если он показывает «Недоступно» (NullDisplayText), иначе покажите его как активируемый DataType.EmailAddress?

Теперь, когда значение свойства равно нулю, оно выглядит как Недоступно , а я хочу показать его как Недоступно.

1 Ответ

1 голос
/ 04 февраля 2020

Вы можете настроить шаблон отображения EmailAddress. Для этого:

  1. Создайте папку DisplayTemplates в Views/Shared
  2. Создайте файл EmailAddress.cshtml в папке DisplayTemplates
  3. Добавить и сохраните в файле следующее содержимое:

    @model string
    @if (string.IsNullOrEmpty(Model))
    {
        @ViewData.TemplateInfo.FormattedModelValue
    }
    else
    {
        <a href="mailto:@Model">@ViewData.TemplateInfo.FormattedModelValue</a>
    }
    

Поскольку теперь, когда вы используете атрибут [DataType(DataType.EmailAddress)] для свойства, будет использоваться ваш шаблон отображения EmailAddress.

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

Примечание: Если вы хотите ограничить шаблон указанными c представлениями, скажем, только для MyModel представлений, то создайте шаблон EmailAddress в Views\MyModel\DisplayTemplates.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...