Member 13582084 Ответов: 1

Значение '1.500, 10' не является действительным для цены


Веб-Конфигурация

<globalization uiCulture="en-US" culture="en-US" />


Сущность

[DisplayName("Price")]
public double Price { get; set; }


Создавать.cshtml по

<div class="form-group">
        @Html.LabelFor(model => model.Price, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Price, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Price, "", new { @class = "text-danger" })
        </div>
    </div>


Что я уже пробовал:

Проблема

Я попытался выяснить это с помощью регулярного выражения, но не смог.

Я получаю эту ошибку, когда добавляю цену продукта.Как я могу это исправить? Спасибо.

[no name]

Пожалуйста, опишите, где вы получаете проблему, а также, пожалуйста, напишите полный код, где вам нужно исправить.

F-ES Sitecore

Вы пытаетесь установить цену в "1.500, 10", что не является допустимым значением, этот текст не может быть преобразован в double. Похоже, что у вас есть проблемы с глобализацией, и кто-то вводит цену для страны, где этот формат действителен, но он не действителен для используемого вами языка (США). Решение состоит в том, чтобы ввести цены в правильном формате для данной локали.

Member 13582084

я могу попробовать де-де, но та же проблема.

F-ES Sitecore

Посмотрите на код global.asax в вопросе в этой теме, вы можете игнорировать все остальное

https://stackoverflow.com/questions/32586551/what-is-the-best-way-to-handle-validation-with-different-culture

[no name]

Вы правы F-ES .либо ограничьте не вводить никаких символов, а только целые числа /демиалы требуются.

Laxmidhar tatwa technologies

@Html.LabelFor(model => model.Price,null, new { @class = "control-label col-md-2" })

@Html.EditorFor(model => model.Price,null, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Price, null, new { @class = "text-danger" })

1 Ответов

Рейтинг:
2

Jochen Arndt

Попросите пользователя ввести значения без разделителя тысяч или удалить его, прежде чем пытаться преобразовать числовые строки в числа.

Еще одна проблема заключается в том, что parseFloat() принимает только числовые строки с точкой в качестве десятичной точки. Поэтому, возможно, потребуется заменить другие десятичные точки, такие как запятая.

Поскольку обе проблемы связаны, поддержка входных строк с тысячами разделителей довольно сложна.

Простое решение (ввод должен быть без разделителя тысяч)

priceEN = price.replace(/[,\u2396\u066B]/g, '.');
priceValue = parseFloat(priceEN);
Это заменит другие десятичные точки точкой.

Расширенное решение (требует определения или определения локали)
Получите разделитель тысяч из локали и удалите его из строки. Пример для периода (локали, использующие запятую в качестве десятичной точки):
priceLoc = price.replace(/[^0-9-,]/g, ''));
Для локалей, использующих точку в качестве десятичной точки
priceLoc = price.replace(/[^0-9-.]/g, ''));
Вышеизложенное также удалит другие символы, такие как символы валюты. Если десятичная точка не является точкой, перед вызовом передайте полученную строку в регулярное выражение из простого примера parseFloat().