Почему Html.DisplayTextFor игнорирование DisplayFormatAttribute?

Я читал в другом месте, что 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

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

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

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