TextBoxFor decimal

时间:2017-07-12 13:36:29

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

在我的数据库中,我存储了数据类型为decimal的字段。我在ASP.NET应用程序中使用完全相同的(decimal)数据类型。

这是在我的视图中,以显示值。

@Html.TextBoxFor(model => model.Stock, new { id = "Stock", @class = "k-textbox" })

这很直截了当。我面临的唯一问题是默认情况下,在我的视图中,数据显示为4位小数。

我举几个例子说明它的外观和外观:

  
      
  1. 1,0000 => 1
  2.   
  3. 1,2000 => 1,2
  4.   
  5. 1,4300 => 1,43
  6.   
  7. 1,8920 => 1892
  8.   
  9. 1,5426 => 1,5426
  10.   

如您所见,我希望将所有0作为小数位(仅在视图中显示时)切断。

请记住:我使用的是逗号而不是小数点。

修改

我的模特

public class Article
{
    public decimal? Stock{ get; set; }
}

3 个答案:

答案 0 :(得分:4)

G29方法的string.Format参数完全符合您的要求。

您可以在模型Stock值上使用以下属性。

[DisplayFormat(DataFormatString = "{0:G29}", ApplyFormatInEditMode = true)]

或者你可以使用@Chris提到的overload

@Html.TextBoxFor(model => model.Stock, "{0:G29}", new { id = "Stock", @class = "k-textbox" })

答案 1 :(得分:2)

您可以像这样使用Name

Db

或者使用字符串插值:

CellTemplate

修改 保存后您无法在{0:G29}中获取值的原因是模型绑定器无法找到名为@{ string temp = string.Format("{0:G29}", decimal.Parse(Model.Stock.ToString())); @Html.TextBoxFor(model => temp) } 的属性。您可以使用@{ string temp = $"{decimal.Parse(Model.Stock.ToString()):G29}"; @Html.TextBoxFor(model => temp) } 代替Controller来解决此问题:

temp

或者,如果您仍想使用TextBox,则可以将TextBoxFor变量重命名为string temp = $"{decimal.Parse(Model.Stock.ToString()):G29}"; @Html.TextBox("Stock" , temp)

TextBoxFor

答案 2 :(得分:1)

有一个overload of TextBoxFor,它使用format参数来格式化文本。

这将允许您以任何方式格式化您的号码。