2017-04-15 58 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">