使用razor @ Html.textboxfor将字符串表示为货币或小数

时间:2014-01-28 23:19:07

标签: c# html asp.net-mvc asp.net-mvc-4 razor

我有一个ASP.NET MVC应用程序。我正在使用razor语法构建HTML表。页面模型定义为

@model IEnumerable < DealView.Models.deal >

并且模型具有属性

public string price { get; set; }

可以是数字或null。

我试图让文本框显示逗号(即1,000,000)甚至更好的货币($ 1,000,000)。目前我正在使用

获得(1000000)
@foreach (var item in Model)
    {
        <tr>
            ...
            <td>@Html.TextBoxFor(modelItem => item.price, new { id = string.Format("
                   {0}_price", item.ID) })</td>
            ...
        </tr>
    }

我尝试了item.price.asint(),但认为null实例会导致问题。任何建议表示赞赏。如果有更好的辅助函数可以使用,我与TextBoxFor没有结婚。

2 个答案:

答案 0 :(得分:2)

如果您可以更改类型,我会使用可以为空的数字类型(int?)。然后,您可以使用内置的formats

price.GetValueOrDefault(0).ToString("C0")

如果您无法更改字符串类型,请编写自定义HtmlHelper扩展名以格式化字符串。

public static class HtmlHelperExtensions
{
    public static string FormatCurrency(this HtmlHelper helper, string val)
    {
        var formattedStr = val;  // TODO: format as currency
        return formattedStr;
    }
}

在您的观看中使用

@Html.FormatCurrency(price)

答案 1 :(得分:2)

您可以首先解析字符串,以便视图模型是强类型数字(int,decimal等)。我将使用可空的decimal

public ActionResult MyAction()
{
    string theThingToParse = "1000000";
    ViewModel viewModel = new ViewModel();

    if(!string.IsNullOrEmpty(theThingToParse))
    {
        viewModel.Price = decimal.parse(theThingToParse);    
    }

    return View(viewModel);
}

为简单起见,您可以在视图模型中的属性上应用以下注释:

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

现在,如果您在视图中使用EditorFor,则应该应用注释中指定的格式,并且您的值应以逗号分隔:

<%= Html.EditorFor(model => model.Price) %>