powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / валидация флоатов
11 сообщений из 11, страница 1 из 1
валидация флоатов
    #38333533
SomeOneElse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть массив флоатов
мне нужно отобразить его в комбобоксе
в контроллере


Код: c#
1.
ViewBag.RADIUS = new SelectList(new {1.2f, 4.5f, 5, 7f});


в представлении так
Код: c#
1.
@Html.DropDownListFor(model => model.RADIUS, ViewBag.RADIUS as SelectList, "Выберите...") </td>



значения отображаются с запятой в качестве разделителя из-за чего не проходят валидацию... как их вывести с разделителем точка? спасибо

извините за глупый возможно вопрос, но в этих технологиях я несилен,а поправить за ушедшим сотрудником нужно срочно...
...
Рейтинг: 0 / 0
валидация флоатов
    #38333750
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
/*
 * Localized default methods for the jQuery validation plugin.
 * Locale: RU
 */
jQuery.extend(jQuery.validator.methods, {
    date: function (value, element) {
        return this.optional(element) ||

            /^([1-2][0-9]|0?[1-9]|3[0-1])(\.(0?[1-9]|1[0-2])(\.([1-2]\d{3}|\d{2}))?)?(\s(2[0-3]|[0-1]?\d)(:[0-5]?\d){1,2})?$/.test(value)

            ||

            /^(2[0-3]|[0-1]?\d)(:[0-5]?\d){1,2}$/.test(value);
    }
    ,
    number: function (value, element) {
        return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value);
    }
});



добавляете в файл jquery.validate.methods_ru.js , и включаете его на страницу после jquery.validation.js (клиентская валидация)

для серверной валидации надо в web.config добавить:

Код: xml
1.
2.
3.
<system.web>
    <globalization uiCulture="ru-RU" culture="ru-RU" />
    ...
...
Рейтинг: 0 / 0
валидация флоатов
    #38333752
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. это решение позволит обойтись запятыми (по умолчанию), а не точками
...
Рейтинг: 0 / 0
валидация флоатов
    #38333761
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще вариант (если требуется принимать как точку, так и запятую в качестве десятичного разделителя)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public class DecimalModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        object result = null;

        string modelName = bindingContext.ModelName;
        string attemptedValue = bindingContext.ValueProvider.GetValue(modelName).AttemptedValue;

        string wantedSeperator = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
        string alternateSeperator = (wantedSeperator == "," ? "." : ",");

        if (attemptedValue.IndexOf(wantedSeperator) == -1
            && attemptedValue.IndexOf(alternateSeperator) != -1)
        {
            attemptedValue = attemptedValue.Replace(alternateSeperator, wantedSeperator);
        }

        try
        {
            result = decimal.Parse(attemptedValue, NumberStyles.Any);
        }
        catch (FormatException e)
        {
            bindingContext.ModelState.AddModelError(modelName, e);
        }

        return result;
    }
}




и в Global.asax.cs добавить в метод Application_Start() :

Код: c#
1.
2.
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());
...
Рейтинг: 0 / 0
валидация флоатов
    #38333828
SomeOneElse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое. Буду пробовать.
...
Рейтинг: 0 / 0
валидация флоатов
    #38333829
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SomeOneElse,

так устанви в конфиге русскую культуру - будут цифры с точкой
...
Рейтинг: 0 / 0
валидация флоатов
    #38335540
Ponin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы валидация корректно работала не только у российских пользователей, у которых обычно "значения отображаются с запятой в качестве разделителя" достаточно изменить web.config:

<system.web>
...
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
culture="auto"
uiCulture="auto"
/>

В результате этого изменения сервер всегда будет использовать настройки культуры, переданные ему клиентом, в частности, если у клиента в браузере десятичным разделителем служит запятая, то и корректно валидироваться будет число с разделителем-запятой и т.л., таким образом, валидацию можно будет проводить без дополнительного кода как на клиенте так и на сервере.
...
Рейтинг: 0 / 0
валидация флоатов
    #38517093
frominfotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt , огромное спасибо!
единственно, "еще вариант (если требуется принимать как точку, так и запятую в качестве десятичного разделителя)" - можно неправильно понять . На самом деле нужен И первый вариант И второй (если нужно и зпт и тчк использовать). Т.е. второй вариант БЕЗ первого не катит (по крайней мере дата не срабатывает). Целый день разбирался с валидацией, остался при мнении, что кто-то что-то недодумал из разработчиков...

И еще - в первом твоем варианте кое-чего не хватает, а именно, если использовать атрибут у модели [range] (как во всех туториалах используют), то в скриптах надо еще и функцию range переопределять, в конец твоего скрипта еще дописать:

Код: javascript
1.
2.
3.
4.
$.validator.methods.range = function (value, element, param) {
    var globalizedValue = value.replace(",", ".");
    return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]);
}



В web.config никакие локали прописывать не потребовалось, от них толку нет. Win 7 en, студия en, локаль в настройках винды - Россия. Студия 2012, MVC 3. Я так понял, что русская локаль в приложении автоматом подтягивается (это видно в браузере), поэтому нет нужды в web.config что-то еще дополнительно менять.

Еще раз спасибо, теперь наконец-то все заработало, и даты через точку вводятся, и числа - хоть с точкой, хоть с запятой срабатывают.
...
Рейтинг: 0 / 0
валидация флоатов
    #38517187
frominfotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UPD: все хорошо работает в IE. В Опере числа "понимаются" лишь с точкой, с запятой уже не проходят.
...
Рейтинг: 0 / 0
валидация флоатов
    #38764986
sapphire.nk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
frominfotek
Код: javascript
1.
2.
3.
4.
$.validator.methods.range = function (value, element, param) {
    var globalizedValue = value.replace(",", ".");
    return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]);
}



Спасибо! Мне это очень помогло, однако в IE иногда возникали ошибки валидации:SCRIPT438: Object doesn't support property or method replace. Решается явным преобразованием значения в строку:
Код: javascript
1.
2.
3.
4.
5.
 range: function (value, element, param) {
        var str = String(value);
        var globalizedValue = str.replace(",", ".");
        return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]);
    }
...
Рейтинг: 0 / 0
валидация флоатов
    #38765017
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользуюсь обычным биндером http://codearticles.ru/articles/776
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / валидация флоатов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]