2017-04-15 94 views
1

我有一個MVC形式以下TextBoxFor:爲什麼我的TextBoxFor正確顯示貨幣值?

<div class="col-xs-3"> 
    @Html.TextBoxFor(m => m.SalesSubTotal, null, new { @class = "form-control", title = "", @tabindex = "-1", @readonly = "readonly", @style = "text-align:right", Value = String.Format("{0:C2}", Model.SalesSubTotal) }) 
</div> 

用戶永遠不會真正在此字段中輸入一個值。

$("#SalesSubTotal").val(salesSubTotal.toFixed(2)); 

當頁面第一次顯示輸入顯示$ 0.00包裝爲我所期望的:現場總是通過在一個JavaScript函數的線(如下所示)進行更新。但是,當字段更新時,貨幣符號從不顯示。因此,而不是顯示$ 90.15之類的東西,它顯示90.15。

有人可以看到我在做什麼錯嗎?

回答

2

數字格式{0:C2}未激活時調用JavaScript的時候了:

$("#SalesSubTotal").val(salesSubTotal.toFixed(2)); 

實際上將只設置現場與你一樣經歷過兩位小數的值。你必須有加美元符號藏漢以得到正確的結果:

$("#SalesSubTotal").val("$" + salesSubTotal.toFixed(2)); 
2

當元素呈現首次與Value = String.Format("{0:C2}", Model.SalesSubTotal)字符串格式被應用,但你改變數值沒有這種格式JS。

您可以創建一個格式化值的輔助功能,並使用它像這樣:

(function() { 
 

 
    function currencyFormat(val) { 
 
    return `$${val.toFixed(2)}`; 
 
    } 
 

 
    let salesSubTotal = 90.1525346252; 
 

 
    $("#SalesSubTotal").val(currencyFormat(salesSubTotal)); 
 

 
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="SalesSubTotal">


或者,你可以用jQuery.fn.extend()擴展jQuery的原型。

(function() { 
 

 
    $.fn.extend({ 
 
    currencyVal: function(val) { 
 
     this.val(`$${val.toFixed(2)}`); 
 
    } 
 
    }); 
 

 
    let salesSubTotal = 90.1525346252; 
 

 
    $("#SalesSubTotal").currencyVal(salesSubTotal); 
 

 
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="SalesSubTotal">