我正在使用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);
}
如何在我的视图中将价格格式化为最多两位小数?
谢谢!
答案 0 :(得分:0)
如果它可以为空,那么您需要值@Model.Price.Value.ToString("G")
才能使用,但请记住检查HasValue
。
老实说,我认为你应该在服务器端进行格式化。
答案 1 :(得分:0)
我怀疑这里的问题是它是可以为空的。
PoweredByOrange在评论中的建议应该是正确的,但我建议也添加一个空检查,否则你只会遇到一个不同的异常,如下所示:
value="@(Model.Price.HasValue ? Model.Price.Value.ToString("G") : "$0.00")"