Ограничение до 2 десятичных знаков в TextBoxFor
Код ниже работает нормально, но в текстовом поле десятичное значение имеет этот формат "0,0000",
(, является десятичным разделителем). Я бы хотел иметь только 2 десятичных числа. Как я могу это сделать?
Спасибо,
//Database model used with NHibernate
public class Bank
{
public virtual int Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName{ get; set; }
public virtual decimal Amount { get; set; }
}
//MVC Model
public class MyModel
{
public Bank Bank { get; set; }
}
//View
@Html.TextBoxFor(m => m.Bank.Amount, new { id = "tbAmount"})
Обновление 1
В отладчике я не вижу десятичного числа, я делаю шаг за шагом внутри (o @HTML.Textbofor) вид, значение не имеет десятичного числа, но когда страница отображается, есть 4 десятичных знака
//Database model used with NHibernate
public class Bank
{
public virtual int Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName{ get; set; }
public virtual decimal Amount { get; set; }
}
//Class for view
public class ViewBank
{
[DisplayFormat(DataFormatString = "{0:n2}", ApplyFormatInEditMode = true)]
public decimal Amount { get; set; }
}
//MVC Model
public class MyModel
{
public Bank Bank { get; set; }
var ViewBank = new ViewBank() { Amount = Bank.Amount};
}
//View
@Html.TextBoxFor(m => m.Amount, new { id = "tbAmount"})
Обновление 2
Я сделал небольшой рабочий пример: http://goo.gl/RKtwY
Ответы
Ответ 1
Я бы использовал шаблоны редактора, и я бы не использовал свои модели домена NHibernate в своих представлениях. Я бы определил модели взглядов, специально адаптированные к требованиям данного представления (в этом случае ограничение суммы до двух десятичных знаков):
[DisplayFormat(DataFormatString = "{0:n2}", ApplyFormatInEditMode = true)]
public decimal Amount { get; set; }
а затем:
@Html.EditorFor(m => m.Bank.Amount)
Ответ 2
Это работает для меня
@Html.TextBox("Amount", String.Format("{0:0.00}", Model.Bank.Amount), new { id = "tbAmount"})
EDIT:
Это для TextBoxFor (не работает на MVC3)
@{var formated = String.Format("{0:0.00}", Model.Bank.Amount);}
@Html.TextBoxFor(m => m.Bank.Amount, formated, new { id = "tbAmount"})
Ответ 3
В MVC 4 вы можете передать формат в качестве второго параметра
//View
@Html.TextBoxFor(m => m.Bank.Amount, "{0:n2}", new { id = "tbAmount"})
Ответ 4
Если у вас нет настраиваемого шаблона редактора для типа Decimal
, тогда EditorFor
, украшенный DisplayFormatAttribute
, вероятно, будет работать из коробки.
Для настраиваемого шаблона редактора я использовал что-то вроде:
@model decimal?
@{
string displayValue;
if (Model == null)
{
displayValue = null;
}
else {
var formatString = (ViewData.ModelMetadata).DisplayFormatString;
displayValue = formatString == null ? Model.ToString() : string.Format(formatString, Model);
}
}
<div class="form-group">
@Html.LabelFor(c => c)
@Html.TextBoxFor(c => c, new { type = "text", Value = displayValue, @class = "form-control" })
@Html.ValidationMessageFor(c => c)
</div>
Что работает, когда свойство украшено DisplayFormatAttribute
следующим образом:
[DisplayFormat(DataFormatString = "{0:n1}", ApplyFormatInEditMode = true), Display(Name = "Commission")]
public decimal? CommissionPercentage { get; set; }
Ответ 5
Если вы используете Entity Framework, достаточно установить Scale в требуемом свойстве в Model Browser for Entity Framework.