Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322

Ошибка неверного формата при вводе в input @Html.TextBoxFor

04.09.2018, 06:14. Показов 3896. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если у меня представление, в нем код

C#
1
<p>@Html.TextBoxFor(x => x.BulkLitre, new { @type = "number", @step = 0.01, @placeholder = "Объем единицы товара, л" })</p>
есть модель:

C#
1
2
[Column]
        public double? BulkLitre { get; set; }
При попытке ввести "1,1" (формат проверяется браузером), выдает Значение "1.1" не является допустимым для BulkLitre.

Если убрать "@type = "number", @step = 0.01", и при вводе "." выдает туже ошибку, при "," пропускает.

регион by/ru

если указать регион
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" uiCulture="us-US" culture="us-US" />

то все проходит нормально?(
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2018, 06:14
Ответы с готовыми решениями:

Возвращение в начало программы при вводе неверного пароля
У меня такая проблема: using System; using System.IO; using System.Linq; using System.Text; using...

Ошибка при вводе html кода
когда вставляю в статическую страницу DLE HTML код выходит такая ошибка, что это?

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

16
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
04.09.2018, 07:10
Amadara, оно?
https://stackoverflow.com/ques... o-a-double

Добавлено через 14 минут
Вообще, была проблема с пустыми NULL dateTime
Решил вот так-решается аналогично с Decimal

Кликните здесь для просмотра всего текста
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
31
32
33
34
35
36
37
38
39
40
41
42
[URL="https://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx/"]https://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx/[/URL]
//Global.asax.cs
protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            [B]CustomModelBindersConfig.RegisterCustomModelBinders();[/B]
        }
 
//-------------------------------------------------
public class CustomModelBinders
    {
        public class CustomDateTimeBinder : IModelBinder
        {
            public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
                return value.ConvertTo(typeof(DateTime), CultureInfo.CurrentCulture);
            }
        }
 
        public class CustomNullableDateTimeBinder : IModelBinder
        {
            public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
                bindingContext.ModelState.SetModelValue(bindingContext.ModelName, value);
                return value?.ConvertTo(typeof(DateTime), CultureInfo.CurrentCulture);
            }
        }
    }
 
    public static class CustomModelBindersConfig
    {
        public static void RegisterCustomModelBinders()
        {
            ModelBinders.Binders.Add(typeof(DateTime), new CustomModelBinders.CustomDateTimeBinder());
            ModelBinders.Binders.Add(typeof(DateTime?), new CustomModelBinders.CustomNullableDateTimeBinder());
        }
    }

Если ошибка при валидации, то посмотри по теме CustomValidators
https://stackoverflow.com/ques... imal-field
0
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
04.09.2018, 19:15  [ТС]
Я не особо понимаю как работает эта система

input html получает "1.1" и не может его сопоставить с форматов "double?", если передать "1,1" то они замещает "." на "," и передает в валидатор, собственный валидатор тут не поможет.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 02:05
Цитата Сообщение от Amadara Посмотреть сообщение
Я не особо понимаю как работает эта система
Цитата Сообщение от Amadara Посмотреть сообщение
собственный валидатор тут не поможет
Да там не валидатор, скорее всего, а именно привязка на модель.
Валидатор работает вместе с IsValid, у вас есть IsValid в коде и оттуда вываливается ошибка? Я же показал, как обработать привязку - пробуйте.
0
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
05.09.2018, 02:08  [ТС]
я не особо понял, как это делать.

C#
1
2
3
4
5
6
@Html.ValidationSummary(false)
 
 
        [Column]
        [ValidationDecimal(ErrorMessage = "Недопустимый формат")]
        public double? BulkLitre { get; set; }
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 02:21
Лучший ответ Сообщение было отмечено Amadara как решение

Решение

Amadara, Валидацию такого рода желательно делать, конечно, до отправки на сервер, с помощью unoubstructive.validation.ajax.
У вас другой прикол - когда данные попадают в модель, они не могут просто преобразоваться. Чтобы это проверить, нужно:
1) В Global.asax.cs, в метод ApplicationStart добавить статический инициализатор.

CustomModelBindersConfig.RegisterCustomM odelBinders();

2) Потом, в отдельный класс, в том же проекте добавить
CustomModelBinders и CustomModelBindersConfig - как я показал.
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class CustomModelBinders
    {
        public class CustomDecimalBinder : IModelBinder
        {
            public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);//Здесь поставь точку остановки и посмотри, что тебе приходит в модель
                return value.ConvertTo(typeof(decimal), CultureInfo.CurrentCulture);//Сделай свой конверт
            }
        }
    }
 
    public static class CustomModelBindersConfig
    {
        public static void RegisterCustomModelBinders()
        {
            ModelBinders.Binders.Add(typeof(decimal), new CustomModelBinders.CustomDecimalBinder());
        }
    }
0
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
05.09.2018, 03:04  [ТС]
Сделал, пробовал поставить us-US, ru-RU, ничего такого это не дало
bindingContext.ModelName = public double? BulkLitre { get; set; }

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
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace buhloasp.Infrastructure
{
    public class CustomModelBinders
    {
        public class CustomDecimalBinder : IModelBinder
        {
            object IModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);//Здесь поставь точку остановки и посмотри, что тебе приходит в модель
                return value.ConvertTo(typeof(double), new System.Globalization.CultureInfo("be"));//Сделай свой конверт
            }
        }
    }
 
    public static class CustomModelBindersConfig
    {
        public static void RegisterCustomModelBinders()
        {
            ModelBinders.Binders.Add(typeof(double), new CustomModelBinders.CustomDecimalBinder());
        }
    }
}
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 03:19
Цитата Сообщение от Amadara Посмотреть сообщение
var value = bindingContext.ValueProvider.GetValue(bi ndingContext.ModelName);
Тут какое значение приходит?

Добавлено через 1 минуту
Можешь скинуть скриншот ошибки?
0
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
05.09.2018, 03:27  [ТС]
Название поля в модели
Миниатюры
Ошибка неверного формата при вводе в input @Html.TextBoxFor   Ошибка неверного формата при вводе в input @Html.TextBoxFor  
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 03:29
Цитата Сообщение от Amadara Посмотреть сообщение
public double? BulkLitre { get; set; }
ещё нужно поставить decimal, а не double
1
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
05.09.2018, 03:51  [ТС]
Цитата Сообщение от Umatkot_Primtep Посмотреть сообщение
ещё нужно поставить decimal, а не double
Кажется я понял, что вы имели ввиду


получилось так , тока проблема появилась, после неверной валидации сбрасывается значение которое было введено
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace buhloasp.Infrastructure
{
    public class CustomModelBinders
    {
        public class CustomDecimalBinder : IModelBinder
        {
            public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);//Здесь поставь точку остановки и посмотри, что тебе приходит в модель
                return value.ConvertTo(typeof(decimal), new System.Globalization.CultureInfo("us-US"));//Сделай свой конверт
            }
        }
        public class CustomNullDoubleBinder : IModelBinder
        {
            public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);//Здесь поставь точку остановки и посмотри, что тебе приходит в модель
                return value.ConvertTo(typeof(double?), new System.Globalization.CultureInfo("us-US"));//Сделай свой конверт
            }
        }
        public class CustomNullDecimalBinder : IModelBinder
        {
            public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);//Здесь поставь точку остановки и посмотри, что тебе приходит в модель
                return value.ConvertTo(typeof(decimal?), new System.Globalization.CultureInfo("us-US"));//Сделай свой конверт
            }
        }
    }
 
    public static class CustomModelBindersConfig
    {
        public static void RegisterCustomModelBinders()
        {
            ModelBinders.Binders.Add(typeof(decimal), new CustomModelBinders.CustomDecimalBinder());
            ModelBinders.Binders.Add(typeof(double?), new CustomModelBinders.CustomNullDoubleBinder());
            ModelBinders.Binders.Add(typeof(decimal?), new CustomModelBinders.CustomNullDecimalBinder());
        }
    }
}
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 04:02
Только что проверил - у меня вот так работает.
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class CustomModelBinders
    {
        public class CustomDecimalBinder : IModelBinder
        {
            object IModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);//Здесь поставь точку остановки и посмотри, что тебе приходит в модель
                var retValue = value.ConvertTo(typeof(decimal), CultureInfo.InvariantCulture);//Сделай свой конверт
                return retValue;
            }
        }
    }
 
    public static class CustomModelBindersConfig
    {
        public static void RegisterCustomModelBinders()
        {
            ModelBinders.Binders.Add(typeof(decimal), new CustomModelBinders.CustomDecimalBinder());
        }
    }


Модель
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
public class BuhClass
    {
        public decimal BulkLitre { get; set; }
        public string Text { get; set; }
    }


Добавлено через 8 минут
Цитата Сообщение от Amadara Посмотреть сообщение
тока проблема появилась, после неверной валидации сбрасывается значение которое было введено
это как?
1
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
05.09.2018, 04:11  [ТС]
Да, после неверной валидации
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 04:20
Amadara, вероятно, значение, которое находится внутри переменной просто не попадает под формат элемента на HTML.
Я вот так сделал
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@using System.Globalization
@model buhaloAsp.Models.BuhClass
 
@{
    ViewBag.Title = "Home Page";
}
 
 
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
 
    @Html.TextBoxFor(x => x.Text)
    @Html.TextBoxFor(x => x.BulkLitre, new { @type = "number", @step = 0.01, @placeholder = "Объём бушла", Value= Model.BulkLitre.ToString("N", CultureInfo.InvariantCulture) })
    <input type="submit" />
}
1
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
05.09.2018, 05:21  [ТС]
можно использовать bindingContext.ModelType

C#
1
2
3
4
5
6
7
8
        public class CustomNullDecimalBinder : IModelBinder
        {
            public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
                return value.ConvertTo(bindingContext.ModelType, new System.Globalization.CultureInfo("us-US"));
            }
        }
это не будет работать с нулабл типами double?, надо походу переопределять метод
Value= Model.BulkLitre.ToString("N", CultureInfo.InvariantCulture)

@Model.BulkLitre - то еще пока не имеет значения, и пока не жать Submit, он будет выкидать
[NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.]
Value = @System.String.Format(CultureInfo.Invari antCulture,$"{@Model.BulkLitre:C3}")}

собственно пока я не пройду валидацию, и не отправлю данные изымать нечего


как в asp.net mvc5 указывать версию языка c#??
вроде в проекте поставил 7.3, а в razer @{} все равно пишет что не та версия


C#
1
2
3
4
5
6
7
8
9
   decimal a = default;
    if (@Model != null)
    {
        a = @Model.PriceEvro;
    }
    else
    {
        a = 0;
    }
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка CS8107 Возможность "литерал по умолчанию" недоступна в C# 7.0. Используйте версию языка 7.1 или более позднюю. buhloasp E:\Documents\Visual Studio 2017\buhloasp\buhloasp\Views\Home\BuhloT able.cshtml 26 Активный
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 05:26
Цитата Сообщение от Amadara Посмотреть сообщение
decimal a = default;
зачем это делаете?
C#
1
decimal val = default(decimal);
Добавлено через 2 минуты
Цитата Сообщение от Amadara Посмотреть сообщение
@Model.BulkLitre:C3
на сколько я помню, C3 - это Currency - и вернёт рубли.

Цитата Сообщение от Amadara Посмотреть сообщение
value.ConvertTo(bindingContext.ModelType
не суть разница - отлов типа обработчика всё равно определяется здесь
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
public static class CustomModelBindersConfig
    {
        public static void RegisterCustomModelBinders()
        {
            ModelBinders.Binders.Add(typeof(decimal), new CustomModelBinders.CustomDecimalBinder());
        }
    }
1
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
05.09.2018, 14:31  [ТС]
Литеральные выражения по умолчанию
Литеральные выражения по умолчанию — это усовершенствование выражения значения по умолчанию. Эти выражения инициализируют переменную до значения по умолчанию. Раньше пришлось бы написать:
C#

Копировать
Func<string, bool> whereClause = default(Func<string, bool>);
Теперь можно опустить тип с правой стороны инициализации:
C#

Копировать
Func<string, bool> whereClause = default;

https://docs.microsoft.com/ru-... xpressions
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2018, 14:31
Помогаю со студенческими работами здесь

Ошибка при вводе "/" в Input
Всем привет! В чем тут может быть проблема? Написал такой код: var insta_likes_qu =...

Не удается сделать запись из-за неверного формата даты
Добрый вечер, или день, уважаемые. Имеется проблема,не удается произвести вставку: есть dateTimePicker, нужно значение вставить в поле...

@Html.TextBoxFor(m => m.Date) + datepicker()
Всем привет! Есть на странице @Html.TextBoxFor(m =&gt; m.Date, new{@class=&quot;datepicker&quot;}) и $(function(){ ...

Ошибка в вводе данных из HTML и переносе их в JavaScript, при выполнении оператора IF или оператора swithc
доброго времени суток, при выполнении одной учебной задачи столкнулся с проблемой: при введении любого значения в поле, код выдает только...

Как реализовать подсказки при вводе в input?
Добрый день Киберовцы! =) Идея такая: Нужно чтоб при вводе в поле, всплывали подсказки(ну это видимо через поиск подстроки) как при вводе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru