开发者

Limit to 2 decimals in TextBoxFor

The code below works fine but, in the textbox the decimal value has this format "0,0000" (, is the decimal separator). I'd like have only 2 decimal. How can I do this ?

Thanks,

//Databas开发者_开发问答e 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"}) 

Update 1

In the debugger, I don't see any decimal, wehn I do step by step inside (o @HTML.Textbofor) the view, the value does not have any decimal but when the page is displayed there are 4 decimals

//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"}) 


I would use editor templates and I would not use my NHibernate domain models in my views. I would define view models which are specifically tailored to the requirements of the given view (in this case limiting the amount to 2 decimals):

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

and then:

@Html.EditorFor(m => m.Bank.Amount) 


This works for me

@Html.TextBox("Amount", String.Format("{0:0.00}", Model.Bank.Amount), new { id = "tbAmount"})

EDIT:

This is for TextBoxFor (does not work on MVC3)

@{var formated = String.Format("{0:0.00}", Model.Bank.Amount);}
@Html.TextBoxFor(m => m.Bank.Amount, formated, new { id = "tbAmount"})


In MVC 4 you can now pass the format as the second parameter

//View
@Html.TextBoxFor(m => m.Bank.Amount, "{0:n2}", new { id = "tbAmount"}) 


If you don't have customized editor template for Decimal type then EditorFor decorated with DisplayFormatAttribute would probably work out of the box.

For a custom editor template I ended up using something like:

@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>

Which works when the property is decorated with DisplayFormatAttribute like so:

[DisplayFormat(DataFormatString = "{0:n1}", ApplyFormatInEditMode = true), Display(Name = "Commission")]
public decimal? CommissionPercentage { get; set; }


This works for me.

in MVC5, in View:

@Html.TextBoxFor(o => o.Amount, "{0:n0}", new { @class = "form-control" })

Output before StringFormatting --> 15000.00

Output after StringFormatting --> 15000

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜