MVC DisplayFormatAttribute - DataFormatString для строк

В моей базе данных хранится строка длиной 12 символов (цифр). Я хочу, чтобы он отображался на экране как: "###/####/####"

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

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

Но предоставленная DataFormatString, похоже, не работает.

РЕДАКТИРОВАТЬ Я пытался решить эту проблему путем создания пользовательского DisplayFormatAttribute, но это не так очевидно.

Какие-либо предложения?

1 ответ

У меня была довольно похожая проблема, и я решил ее с помощью атрибута UIHint в моем классе viewmodel. Кроме того, я затем создал средство форматирования в своей папке EditorTemplates. (MVC ищет эту папку по умолчанию, я думаю). Так что происходит, что движок рендеринга заменяет редактор, на мой взгляд, форматером. Мой пример для номера банковского счета с 11 цифрами, поэтому вы должны немного изменить его для вашего случая. Бэкэнд базы данных принимает только 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(".", "");
    }
  }
}
Другие вопросы по тегам