2015-07-08 5 views
0

У меня есть строка, хранящаяся в моей БД, которая всегда содержит 12 символов (цифр). Я хочу это будет отображаться на экране, как: "###/####/####"MVC DisplayFormatAttribute - DataFormatString для строк

Мне нравится использовать DisplayFormatAttribute

[DisplayFormat (DataFormatString = «{0: # #/####/#####} ", ApplyFormatInEditMode = true)]

Но предоставленный DataFormatString не работает.

EDIT Я решил это решить, создав клиент DisplayFormatAttribute, но это, похоже, не так очевидно.

Любые предложения?

ответ

0

У меня была аналогичная проблема, и я решил ее использовать с помощью атрибута UIHint в классе viewmodel. Кроме того, я создал файл форматирования в моей папке EditorTemplates. (Похоже, MVC ищет эту папку по умолчанию). Итак, что происходит, так это то, что движок rendring заменяет редактор на мой взгляд с помощью форматирования. Мой пример для номера банковского счета с 11 цифрами, поэтому вам нужно немного изменить его для своего случая. Бэкэнд db принимает только 11 цифр без разделителей, поэтому я удаляю их до сохранения.

На мой взгляд

@Html.EditorFor(m => m.BankAccount) 

В папке Views/EditorTemplates

@model String 

@{ 
    Script.Require("common"); 
} 

@{String temp = String.Empty;} 

@if (!String.IsNullOrEmpty(Model)) 
{ 
    if (Model.Length == 11) 
    { 
     temp = String.Format("{0: ####-##-##-###}", Convert.ToInt64(Model)).Replace("-","."); 
    } 
    else 
    { 
     temp = Model; 
    } 
} 

<input type="text" id="BankAccount" name="BankAccount" class="form-control span6" onkeypress="NumberFilter(event, '.');" value="@temp" /> 

ViewModel

private string _BankAccount; 
[UIHint("_BankAccountFormatter")] 
public string BankAccount 
{ 
    get 
    { 
    return _BankAccount; 
    } 
    set 
    { 
    if (!String.IsNullOrEmpty(value)) 
    { 
     _BankAccount = value; 
     _BankAccount = _BankAccount.Trim(); 
     _BankAccount = _BankAccount.Replace(".", ""); 
    } 
    } 
}