2017-04-04 49 views
0

我在寻找几天如何格式化我的双重和双重? 输入作为 十进制=逗号和千分=点服务器端和客户端的MVC格式编号欧式风格

例如:

123456.01 ==> 123.456,01

14,02 ==> 14,02

987654321,002 ==> 987.654.​​321,002

我做了什么至今:

  1. 我检查服务器/本地区域设置
  2. 在我的web.config中添加全球化

    全球化的UICulture = “FR-BE” 文化=“FR-BE

  3. 在我的模型我用下面的属性(但我使用TextBoxFor)

    [DisplayFormat(DataFormatString = "{0:N3}", ApplyFormatInEditMode = true)] 
    

    @ Html.TextBoxFor(型号=> model.size,新的{的tabindex = 11,ID = “SizTotText”,@class = “形式控制输入-SM计算值”})

但 如何我可以:

1-在用户输入时,数字应该格式化? 我发现这个解决方案:how to format input box text as I am typing it 但我不能用点切换逗号Fiddle

下面这篇文章(改为十进制加倍)Post

有在计算器很多的解决方案,但没有一个似乎2-创建自定义帮手为我工作。

我希望我的问题是明确的,对不起我的英文不好

编辑:

我决定忽略客户端的格式,没有更多点的顿号,但我仍然有问题与区域设置。

我的应用程序仍然把小数点作为分隔符,我该如何解决这个问题? 更有趣,它接受一些字段和其他字段,但它们都具有相同的属性,设置...等见截图 error message Fields

有错误的字段是计算字段

var url = '@Url.Action("CalculateDropPrec", "Drop")'; 
    $('.calc').change(function() { 
     // get the values of the textboxes 
     var numUsed = $('#numUseText').val(); 
     var totNumUsed = $('#totNumUseText').val(); 
     $.post(url, { nUsed: numUsed, tUsed: totNumUsed }, function (response) { 
      $('#precText').val(response); 
     }); 
     return false; 
    }); 


@Html.TextBoxFor(model => model.PerceDropTot, new {data_val = "false", id = "precText", name = "precText", @class = "form-control input-sm drop-read", placeholder = "0.0", @readonly = "readonly" }) 


public JsonResult CalculateDropPrec(double nUsed, double tUsed) 
{ 
    var result = CommonComputation.CalcPrecDrop(nUsed, tUsed); 
    return Json(result); 
} 
+0

在文本框中添加千位分隔符意味着如果不创建自定义模型绑定器即可将您的字符串转换回“decimal”,则无法绑定到您的模型(小数类型不能绑定到包含数千个分隔符的值)。你可以考虑[这个项目](https://github.com/stephenmuecke/mvc-numericinput)作为替代 –

+0

而不是设置$('#precText').val(response);'你可以尝试先格式化结果是一些你期望的格式和精度,做这样的事情:'$('#precText').val(parseFloat(response).toFixed(3));' – thmshd

回答

0

这可能不会到你想要的方向,不过是“数字格式为你键入”真期望?缺点是行为会变得非常棘手,我的意思是对用户也是如此。假设您输入的数字“1234”变为“1.234”。当输入字段再次聚焦并且插入符号放在这里时:“1.|234”,是否清楚当Backspace命中时会发生什么?是删除点,还是1?当用户尝试手动输入,.会发生什么?所有的问题都需要考虑。此外,当您在FORM中POST该值时,它格式化时不是有效的数字。

由于这些原因,即使我们使用的Kendo UI NumericTextBox等数字输入的高级控件选择格式化仅显示值,但不拦截用户输入(尝试链接的Demo)。

但是你也可以检查cleave.js是如何解决这个问题的,它实现了实时格式化,但可能使用浏览器的文化设置。但是在尝试纠正已有值时,个人不喜欢how it behaves

+0

Thankx抽空回答我的问题,我决定忽略格式化部分,但随机一些字段不被视为数字,请参阅我的更新 – Maro