Моя модель:
[Required(ErrorMessage = "Required field")]
[Display(Name = "Price")]
public decimal Price { get; set; }
Мой взгляд:
Есть форма с несколькими другими полями ввода и полем ввода для Price
@Html.EditorFor(model => model.Price, new { htmlAttributes = new { @class = "form-control"} })
Выпуск:
- [Проверка браузера] Если я вставлю 2.3 в поле ввода, я получу «Поле должно быть числом»
- [Проверка сервера] Если я вставлю 2,3 в поле ввода, это не выдаст ошибку сразу, но после отправки формы я получу «значение недействительно»
Что я пробовал:
В SO много тем об этом, поэтому я попробовал несколько предложений, но, к сожалению, безуспешно.
Предложение A - System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new System.Globalization.CultureInfo("pt-PT");
в Application_Start ()
Предложение B - положить <globalization uiCulture="pt-PT" culture="pt-PT" />
в web.config
Предложение C - (в отчаянии) data_val = "false"
в поле ввода для отключения проверки браузера. Когда я сделал это, я обнаружил две вещи: если я введу 2.3, значение 0 достигнет контроллера; если я ввожу 2,3, значение «2,3» (с точкой) достигает контроллера, но после сохранения в БД теряет десятичную часть, я имею в виду, что только «2» сохраняется в таблице БД
Предложение D - Даже если я ввожу число с запятой в коде, когда я проверяю его в режиме отладки, я вижу, что оно использует точку, а при сохранении в BD сохраняет только "2". Как это возможно?
Ingredient ингредиент ToAdd = новый ингредиент
{
Имя = ингредиент. Имя,
Цена = Десятичная. Парусная («2,3»),
НДС = ингредиент. НДС
}; * * Тысяча пятьдесят-две
if (ModelState.IsValid)
{
db.Ingredients.Add(ingredientToAdd);
db.SaveChanges();
return RedirectToAction("Index");
}