为什么我的TextBoxFor没有正确显示货币值?

时间:2017-04-15 23:30:21

标签: javascript asp.net-mvc razor

我在MVC表单上有以下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>

用户永远不会在此字段中输入实际值。该字段始终通过JavaScript函数中的一行更新,如下所示:

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

当页面首次显示时,输入显示$ 0.00,正如我所料。但是,更新字段时,永远不会显示货币符号。因此,它不会显示90.15美元,而是显示90.15。

有人能看出我做错了吗?

2 个答案:

答案 0 :(得分:2)

调用javascript时,您的数字格式{0:C2}不再有效:

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

实际上只是将字段设置为带有两位小数的值,就像您经历过的那样。你必须在那里添加美元符号以获得正确的结果:

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

答案 1 :(得分:2)

第一次使用Value = String.Format("{0:C2}", Model.SalesSubTotal)呈现元素时,将应用字符串格式,但是在JS中更改没有该格式的值。

您可以创建一个帮助函数来格式化值并使用它,如下所示:

&#13;
&#13;
(function() {

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

  let salesSubTotal = 90.1525346252;

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

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

或者,您可以使用jQuery.fn.extend()扩展jQuery原型。

&#13;
&#13;
(function() {

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

  let salesSubTotal = 90.1525346252;

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

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