Почему Html.DisplayText для игнорирования DisplayFormatAttribute? - PullRequest
12 голосов
/ 24 ноября 2011

В другом месте я читал, что DisplayFormat просто использует DataFormatString в том же порядке, что и string.Format.Я пытаюсь отобразить длинный номер телефона;в консольном приложении работает следующее:

const string PhoneFormat = "{0:###-###-####}";
long? phone = 8005551212;
string s = string.Format(PhoneFormat, phone);

s = "800-555-1212"

Почему, когда я использую его в своем представлении как

@Html.DisplayTextFor(model => model.Patient.Phone)

то, что отображается 8005551212

Вот модель ...

public class Patient
{
    [DisplayFormat(DataFormatString = "{0:###-###-####}")]
    public long? Phone { get; set; }
}

Также пробовал DisplayFor, который тоже не работает.

Единственный способ, которымКажется, работает для меня это

Html.Raw(string.Format("{0:###-###-####}", Model.Patient.Phone))

1 Ответ

12 голосов
/ 24 ноября 2011

Я быстро взглянул на источник MVC3 . Я предполагаю, что вы указываете свой формат через DataAnnotations

[DisplayFormat(DataFormatString = "{0:###-###-####}")]
public long Phone { get; set; }

Похоже, что это не применяется, когда вы используете хелпер @Html.DisplayTextFor(m => m.Property), который, по-видимому, в конечном итоге делает простой ToString. Однако он применяется при использовании @Html.DisplayFor(m => m.Property), который вызывает через TemplateHelpers.

...