Search code examples
c#htmlasp.net-core-mvcasp.net-core-6.0

How to pass double value from view into controller


Entity:

public class Material
{
    public int Id { get; set; }
    public string? Name { get; set; }
    public int? Unit { get; set; }
    public double? Count { get; set; }
    public double? Amount { get; set; }
    public double? Cost { get; set; }
}

Controller:

public IActionResult Edit(int id, Material material)
{
    ...

}

View:

<div class="form-group">
    <label asp-for="Count" class="control-label"></label>
    <input asp-for="Count" class="form-control" />
    <span asp-validation-for="Count" class="text-danger"></span>
</div>

If I try to pass 10.2 enter image description here enter image description here

If I try to pass 10,2 enter image description here

On the internet I came across the following

<configuration>
<system.web>
    <globalization
       enableClientBasedCulture="true"        
       culture="en-GB"/>
</system.web>

It need to past into Web.config, but i don't have this file in my solution

ASP.NET Core MVC (.NET 6)


Solution

  • One option is to enable request localization on the app side:

    var app = builder.Build();
    var supportedCultures = new[] { "en-GB" };
    var localizationOptions = new RequestLocalizationOptions().SetDefaultCulture(supportedCultures[0])
        .AddSupportedCultures(supportedCultures)
        .AddSupportedUICultures(supportedCultures);
    
    app.UseRequestLocalization(localizationOptions);
    

    Or you can just manually manipulate the default culture on app start:

    var cultureInfo = new CultureInfo("en-GB");
    cultureInfo.NumberFormat.NumberDecimalSeparator = ".";
    
    CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
    CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
    

    Read more - Implement a strategy to select the language/culture for each request in a localized ASP.NET Core app.