#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