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(".", "");
}
}
}