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
Box after submit button is clicked --> Validation error for the same value
Box after comma is changed to point --> No validation error
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With