2014-10-01 22 views
2

我正在使用Razor作爲視圖引擎的ASP.NET MVC應用程序。我想在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取代@Model.Price.ToString("G"),我的應用程序的作品。但是,十進制值格式不正確。價格變量來自我的控制器操作。在控制器中,我有:

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

不,它是引用不當,剃刀手柄那。 – Phaeze 2014-10-01 18:54:15

+1

你確定它不是null?試試'@ Model.Price.Value.ToString(「G」)'也許? – PoweredByOrange 2014-10-01 18:54:37

+0

@Phaeze正確,我的錯誤。 – 2014-10-01 18:55:00

回答

0

如果它可以爲空,那麼您將需要價值@Model.Price.Value.ToString("G"),這將工作,但要記住檢查HasValue

說實話,我認爲你應該在服務器端進行格式化。

+0

這樣做格式化服務器端。 – 2014-10-03 21:47:22

0

我懷疑這裏的問題是它是空的。

PoweredByOrange在評論建議應該是正確的,但我也建議添加空校驗,否則你會正好碰上一個不同的異常,像這樣:

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