Ограничение до 2 десятичных знаков в TextBoxFor - PullRequest
38 голосов
/ 25 мая 2011

Код ниже работает нормально, но в текстовом поле десятичное значение имеет этот формат «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"}) 

Ответы [ 4 ]

62 голосов
/ 25 мая 2011

Я бы использовал шаблоны редактора и не использовал бы мои доменные модели NHibernate в моих представлениях.Я бы определил модели представлений, которые специально адаптированы к требованиям данного представления (в данном случае ограничение суммы до 2 десятичных знаков):

[DisplayFormat(DataFormatString = "{0:n2}", ApplyFormatInEditMode = true)]
public decimal Amount { get; set; }

, а затем:

@Html.EditorFor(m => m.Bank.Amount) 
38 голосов
/ 25 мая 2011

Это работает для меня

@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"})
16 голосов
/ 28 марта 2017

В MVC 4 теперь вы можете передавать формат как второй параметр

//View
@Html.TextBoxFor(m => m.Bank.Amount, "{0:n2}", new { id = "tbAmount"}) 
1 голос
/ 16 февраля 2016

Если у вас нет настроенного шаблона редактора для типа 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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...