Передача двойного значения для координат в .NET Core MVC 3.1

#c# #asp.net-core-mvc #double #coordinates

#c# #asp.net-core-mvc #двойное #координаты

Вопрос:

Я борюсь с проблемой передачи значения для свойства double. В качестве свойства, касающегося координат (широта, долгота), их формат будет ###.######. На моем КОМПЬЮТЕРЕ числовой формат по умолчанию ### # ##,## В моем поле ввода передаются только значения ###, ###. Если поместить что-то другое, например:

1234,444 затем я получаю сообщение «Широта поля должна быть числом». и в свойстве code получено значение 0

130.653221 => то же самое, свойство получает 0, и я получил сообщение «Значение ‘130.653221’ недопустимо для широты».

12,1234 тогда клиентский валидатор не передаст меня, потому что «Широта поля должна быть числом».

Я пытался поместить регулярное выражение в ViewModel, например [RegularExpression(@»^ d . d{0,6} $»)], но безуспешно. Есть ли какой-либо способ изменить формат значения на ###.######?

Ниже вы можете найти мой код:

ViewModel

     public class ShopLocationViewModel
{
    public int Id { get; set; }
    public string Header { get; set; }
    public string FirstText { get; set; }
    public string SecondText { get; set; }
    public string ThirdText { get; set; }
    public string LinkText { get; set; }
    public string Link { get; set; }
    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public int Priority { get; set; }
}
  

Контроллер:

         [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind("Header,FirstText,SecondText,ThirdText,LinkText,Link,Latitude,Longitude,Priority,Id")] ShopLocationViewModel shopLocation)
    {

        if (ModelState.IsValid)
        {
            var shopLocationDto = _viewModelMapper.Map(shopLocation);
            _dataManger.AddNewShopLocation(shopLocationDto);
            return RedirectToAction(nameof(Index));
        }
        return View(shopLocation);
    }
  

Вид:

 @model ShopLocationViewModel

<div class="row">
<div class="col-md-4">
    <form asp-action="Create">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="Header" class="control-label"></label>
            <input asp-for="Header" class="form-control" />
            <span asp-validation-for="Header" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="FirstText" class="control-label"></label>
            <input asp-for="FirstText" class="form-control" />
            <span asp-validation-for="FirstText" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="SecondText" class="control-label"></label>
            <input asp-for="SecondText" class="form-control" />
            <span asp-validation-for="SecondText" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="ThirdText" class="control-label"></label>
            <input asp-for="ThirdText" class="form-control" />
            <span asp-validation-for="ThirdText" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="LinkText" class="control-label"></label>
            <input asp-for="LinkText" class="form-control" />
            <span asp-validation-for="LinkText" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Link" class="control-label"></label>
            <input asp-for="Link" class="form-control" />
            <span asp-validation-for="Link" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Latitude" class="control-label"></label>
            <input asp-for="Latitude" class="form-control" />
            <span asp-validation-for="Latitude" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Longitude" class="control-label"></label>
            <input asp-for="Longitude" class="form-control" />
            <span asp-validation-for="Longitude" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Priority" class="control-label"></label>
            <input asp-for="Priority" class="form-control" />
            <span asp-validation-for="Priority" class="text-danger"></span>
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
        </div>
    </form>
</div>
  
 @section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}}
  

Комментарии:

1. Найдите культуру на следующей странице : afana.me/archive/2011/01/14 /…

2. У вас не может быть широты больше 90 градусов. Северный полюс находится под углом 90 градусов — поэтому неудивительно, что вы получили сообщение «Значение ‘130.653221’ недопустимо для широты».

3. @MatthewWatson вы правы насчет широты, но, как вы можете видеть в коде, я не ограничиваю свойство координатами, поскольку оно обычное двойное, поэтому 130.653221 должно быть действительным в любом случае

4. Можете ли вы предоставить свой числовой формат по умолчанию на вашем ПК, я протестирую ваш код и получу 1234,444=>1234444,130.653221=>130.653221,12,1234=>121234