【问题标题】:separate numbers by comma with asp.net mvc用 asp.net mvc 用逗号分隔数字
【发布时间】:2011-07-24 15:58:22
【问题描述】:

我正在开发一个 MVC2 应用程序。

我使用数据注释来验证数据(客户端和服务器端)。我的模型中有几个字段只允许十进制值。一旦用户键入十进制值,我希望将其转换为逗号分隔的更易读的格式。例如,1200 应该格式化为 1,200,而 500 应该保持原样。

这是我的模型:

public virtual GrossFee? Fee { get; set; }

这是它在视图上的样子:

%: Html.TextBoxFor(model => model.GrossFee)%>

对此的任何想法都将受到高度赞赏。

谢谢!

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-2 numbers format data-annotations


【解决方案1】:

我把这行代码放到了我的Controller中

public ActionResult Index()

{

        TempData["TotalPaid"] = totalAmountPaid.ToString("#,###.00");

}

And i put this in my View

   <table>
       <tr>
         <td style="color:green; font-weight:bold" >
            Amount Paid: $@TempData["TotalPaid"]
       </td>
    </tr>        
</table>

【讨论】:

    【解决方案2】:
    drPastDateDetail[strMS] = decValue.ToString();
    

    如果您希望用逗号显示数值,而不是上面的行,下面的代码将帮助您-

    String Test = String.Format("{0:#,#.##}",decValue);
    drPastDateDetail[strMS]=Test;
    

    【讨论】:

      【解决方案3】:
      [DisplayFormat(DataFormatString = "{0:n}")]
      public virtual GrossFee? Fee { get; set; }
      

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        您可以使用Html.EditorFor 而不是Html.TextBoxFor,并让视图尊重这样的数据注释:

        型号:

        (我不知道GrossFee? 是什么,但假设它是小数)

        [DisplayFormat(DataFormatString = "{0:0,0}")]
        public virtual Decimal? Fee { get; set; }
        

        查看:

        Html.EditorFor(model => model.GrossFee)
        

        您可能还需要调整 HtmlEncode 和 ApplyFormatInEditMode 以适合您的特定应用程序。

        一旦输入(即在回发之前)将文本框内容转换为逗号分组数字的任何内容都需要基于 javascript。

        【讨论】:

        • 非常感谢您的建议。我像你提到的那样尝试过,它以我想要的方式显示总费用的价值。 [DisplayFormat(DataFormatString = "{0:0,0}", ApplyFormatInEditMode = true, HtmlEncode = true)] public decimal GrossFee { get;放;但是当表单被发送回自身时,ModelState.IsValid 为 false,并且它抱怨 Gross fee 的值格式不正确。顺便说一句,我将客户端验证设置为 true,并且每个字段都有一个 ValidateMessageFor 控件。非常感谢。
        • 这可能是因为这些值现在包含逗号,而您的验证器期待的是一个正数。如果逗号很重要,那么您将需要考虑自定义验证器或在将它们发送到表单帖子之前将它们剥离。
        • 这里是用逗号建模绑定小数的“官方”解决方案。 haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx
        • 来自 haacked.com 的“官方”解决方案也对我有用!
        【解决方案5】:

        您应该能够在 tostring 中使用格式

        var foo = 1200.2;
        var bob = foo.ToString("#,###.00##");
        

        【讨论】:

        • 我希望它在客户端动态执行,就像我在文本框中输入 1200 并且一旦文本框失去焦点,它应该将字符串格式化为“#,###. ##"。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-22
        • 2011-04-23
        • 2020-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多