Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MVC/JQuery validation does not accept comma as decimal separator

Tags:

Update 07.01.2018

Even though it was suggested, that this is rather a jQuery problem than an MS ASP MVC problem, I think it is an MVC Problem. I've created the whole app in asp.net core 2.0 MVC and the error persist. What links it to MVC for me, is the fact that I can solve the date validation problem by adding the line [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")] to the model. Hence, MVC has an influence on the validation. So I would assume there is some way in MVC to fix this (See this post). Please post answers for asp.net core 2.0.

Original Post

In an MVC5 page I render a Double Property in a Textbox. When the page is loaded, the value is shown with a "," as decimal separator, which is correct, as the page runs on an German System. If I want to save the form, I get an validation error. How can this be solved? I know that there are some questions on the topic, but as far as i can see, most of them are outdated... I'm still struggling, that there is no setting or anything built-in that allows users from different countries to work with MVC apps.

Model:

[DisplayFormat(DataFormatString = "{0:n2}", ApplyFormatInEditMode = true)] public Double Gewicht {     get { return gewicht; }     set { gewicht = value; OnPropertyChanged(new PropertyChangedEventArgs("Gewicht")); } } 

CSHTML:

<div class="form-group">     @Html.LabelFor(model => model.Gewicht, htmlAttributes: new { @class = "control-label col-md-3" })     <div class="col-md-8">         @Html.EditorFor(model => model.Gewicht, new { htmlAttributes = new { @class = "form-control col-md-1" } })         @Html.ValidationMessageFor(model => model.Gewicht, "", new { @class = "text-danger" })     </div> </div> 

Web.config

<globalization uiCulture="de-DE" culture="de-DE" /> 

Box after its loaded --> Value loaded with a comma as decimal separator enter image description here

Box after submit button is clicked --> Validation error for the same value

enter image description here

Box after comma is changed to point --> No validation error enter image description here

Update 05.01.2018

I've tried the solution shown here which unfortunately doesn't work for me. However, I also discovered, that the values not only get not acceptet, but are also changed to numbers where group separator and decimal separator are mixed up (see picture). What happens is, that the value of 22 gets changed to 22.5 and stored in the database. The result beeing, that a value of 2,250.00 is stored to the database.

enter image description here

Update 07.01.2018

What is also interesting, is the fact that the date fields accept the german format perfectly fine.

Property

private DateTime? inbetriebnahmedatum;  [DataType(DataType.Date)] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")] public DateTime? Inbetriebnahmedatum {     get { return inbetriebnahmedatum; }     set { inbetriebnahmedatum = value; OnPropertyChanged(new PropertyChangedEventArgs("Inbetriebnahmedatum")); } } 

The value shown below is accepted and processed without any errors. enter image description here

Update 07.01.2018 - 2

If I change the line in edit.cshtml from

<input asp-for="Gewicht" class="form-control" /> 

to

<input name="Gewicht" id="Gewicht" type="number" class="form-control" value="@Model.Gewicht"/> 

The form can be submitted with the value "23,7" without validation errors. In the controller, the bound model property shows a value of "237", where as the IFormCollection shows a value of "23.7". This would suggest a problem with the model binder.