在ASP.NET MVC中格式化Razor中的值

时间:2014-10-01 18:48:43

标签: c# asp.net-mvc razor

我正在使用Razor作为视图引擎的ASP.NET MVC应用程序。我正在尝试

<div class="form-group">
  <label class="control-label" for="price">Price</label>
  <div class="input-group">
    <div class="input-group-addon">$</div>
    <input id="price" name="price" class="form-control" type="text" autocomplete="off" value="@Model.Price.ToString("G")" />
  </div>
</div>

当此代码运行时,我收到一条错误消息:

Cannot perform runtime binding on a null reference

如果我用@Model.Price.ToString("G")替换@Model.Price,我的应用就可以了。但是,十进制值格式不正确。 Price变量来自我的控制器动作。在控制器中,我有:

public ActionResult View(int? id)
{
  Product product = null;
  if (id.HasValue)
    product = Product.LoadFromDb(id.Value);
  else
    product = new Product();

  // product.Price is a nullable decimal (i.e. decimal?)

  return View(product);
}

如何在我的视图中将价格格式化为最多两位小数?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果它可以为空,那么您需要值@Model.Price.Value.ToString("G")才能使用,但请记住检查HasValue

老实说,我认为你应该在服务器端进行格式化。

答案 1 :(得分:0)

我怀疑这里的问题是它是可以为空的。

PoweredByOrange在评论中的建议应该是正确的,但我建议也添加一个空检查,否则你只会遇到一个不同的异常,如下所示:

value="@(Model.Price.HasValue ? Model.Price.Value.ToString("G") : "$0.00")"