数字输入用点替换十进制逗号

时间:2015-07-02 13:21:45

标签: c# asp.net-mvc html5 input number-formatting

在使用“数字”类型和值“1,5”的输入发布表单后,浏览器(Chrome 43.0.2357.130,FF 38.0.5)正在发送带点作为小数点分隔符的数字,但输入具有属性lang =“cs”(在捷克共和国我们使用十进制逗号),因此对于ASP.NET MVC,它的格式不正确。

如何设置浏览器(表单/输入)以发送用户真正填写的内容(在我的情况下为“1,5”)?

从浏览器发送的表单数据:

__RequestVerificationToken:KJG1yJxm-1EcUHPwgvr0gPpkyoEHHHcTfSu6hHvaKDA_XKHTzWfPfUJtAr11gNiR_euG_jWYmXlrMO7dyhSf7g4K74eOVTtEzLQ1OdrTLZ_cbIyyYj5vrgxlk81JzuhM0
PaymentMethodId:8
PaymentMethod:Direct payment
Provider:Direct payment
MinAmount:1,00000000
MaxAmount:5000,00000000
Amount:1.5

2 个答案:

答案 0 :(得分:2)

支持<input type="number">的浏览器将始终发送.作为小数点分隔符。您无法更改此内容,因为这符合<input type="number">的HTML5规范。 lang属性与发送到服务器的数据无关:浏览器必须始终使用.。但是,lang属性可用于显示目的。

但是,不支持<input type="number">的浏览器会在您键入数字时发送该号码(例如,)。

恕我直言,这是非常有问题的(并且非常具有角度中心性),因为服务器不知道浏览器是否支持<input type="number">,使得解析非常容易出错(是&#34; 1.000&#34;一个一千或一个?)。

您可以使用<input type="text">控制发送内容的唯一方法。如果你想要微调器功能,你需要使用自定义JavaScript库,比如jQuery UI。

这也是为什么ASP.NET MVC编辑器(For)默认会对{strong>十进制而不是<input type="text">等类型使用<input type="number">

另见http://www.w3.org/TR/2014/REC-html5-20141028/forms.html#input-author-notes

请注意,Internet Explorer会在用户输入数字输入时发送数字输入,忽略规范。

答案 1 :(得分:0)

Oukey,看起来我找到了解决方法,但请看一下如何处理类似问题......

public class ApolloModelBinder : DefaultModelBinder
{
    protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)
    {
        var request = controllerContext.HttpContext.Request;

        decimal i;
        var value = request.Form[propertyDescriptor.Name];
        if (propertyDescriptor.PropertyType == typeof(decimal) && decimal.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out i))
        {
            propertyDescriptor.SetValue(bindingContext.Model, i);
            return;
        }

        base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
    }
}