6 / 5 / 1
Регистрация: 01.10.2021
Сообщений: 76
1

Как переопределить текст ошибки, либо сделать, чтобы ошибки не возникало?

12.07.2023, 21:14. Показов 882. Ответов 9

Author24 — интернет-сервис помощи студентам
У меня есть свойства в модели типа decimal. И если в textbox у меня пустая строка, то появляется ошибка system.invalidcastexception: " is not a valid number. Я уже понял, что это проблема с невозможностью преобразования строки в decimal. Так вот мне нужно понять как можно переопределить текст ошибки, либо просто сделать, чтобы этой ошибки не возникало. Я уже пробовал создать кастомный validationattribute и переопределял IsValid, чтобы добавить свое сообщение ошибки, но все равно возникало system.invalidcastexception: " is not a valid number. Ну вот допустим пример свойства:
C#
1
2
[Range(1, 500000.00, ErrorMessage = "Неприемлемая доза")]
    public decimal Dosage { get; set; }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2023, 21:14
Ответы с готовыми решениями:

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

Как сделать, чтобы при столкновении двух объектов не возникало сил, которые их отталкивают друг от друга?
Возьмём два объекта и столкнём их на большой скорости. Нужно, чтобы они не пролетели сквозь друг...

Как сделать, чтобы сериализация не заканчивалась после первой ошибки?
Доброго времени суток. У меня есть xml файлик, предположим с рут-тегом Names и кучей вложенных в...

как сделать так, чтобы вместо #ошибки выводило 0(ноль)?
Таблица1: 1)Klient - Клиент 2)ves_kond - кондициооный вес 3)ves_nett - вес нетто...

Как сделать чтобы из двух текстов созданными функциями, вывести третий текст, либо вернуть значения обратно в main?
#include <stdio.h> #include <string.h> #define Z ",.!? " char rem_s1(char *s1) { int...

9
HF
1188 / 776 / 185
Регистрация: 09.09.2011
Сообщений: 2,375
Записей в блоге: 2
12.07.2023, 21:32 2
Цитата Сообщение от 4lehikc Посмотреть сообщение
Я уже пробовал создать кастомный validationattribute и переопределял IsValid,
Ваши валидаторы сработают после того как было выполнено преобразование к типу. А invalidcastexception бросает InputFormatter (в AspNet например).

Вы примеров не привели, каким образом даные из textbox попадали в модель. Мало ли где вы ещё что не так сделали.
Если это например JSON, то он не даст даже передать валидное значение, но в строковом виде типа "1.2345", а требуется именно 1.2345.
0
6 / 5 / 1
Регистрация: 01.10.2021
Сообщений: 76
12.07.2023, 21:51  [ТС] 3
У меня Avalonia. Вот так я передаю данные во ViewModel через привязку
XML
1
2
3
<TextBox Watermark="Доза" 
                         HorizontalAlignment="Stretch"
                         Text="{Binding EditingProduct.Dosage}"/>
Привязываются к этому свойству
C#
1
2
3
4
5
public Product EditingProduct
        {
            get => _editingProduct;
            set => this.RaiseAndSetIfChanged(ref _editingProduct, value);
        }
Все, ничего больше там не делается.
0
HF
1188 / 776 / 185
Регистрация: 09.09.2011
Сообщений: 2,375
Записей в блоге: 2
12.07.2023, 21:59 4
Цитата Сообщение от 4lehikc Посмотреть сообщение
get => _editingProduct;
а сам объект где?
0
6 / 5 / 1
Регистрация: 01.10.2021
Сообщений: 76
12.07.2023, 22:06  [ТС] 5
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public EditProductViewModel(Product product)
        {
            Product = product;
            EditingProduct = new Product
            {
                Name = product.Name,
                Manufacturer = product.Manufacturer,
                Unit = product.Unit,
                Dosage = product.Dosage,
                QuantityInStock = product.QuantityInStock,
                Price = product.Price,
                Image = product.Image
            };}
0
HF
1188 / 776 / 185
Регистрация: 09.09.2011
Сообщений: 2,375
Записей в блоге: 2
12.07.2023, 22:20 6
Ну дак где объект то? У вас объект _editingProduct и он должен быть во вьюмодели и проинициализован.
А привязка на свойство. При изменении свойства, с чего бы ему обновлять (RaiseAndSetIfChanged) объект, если вы поменяли фактически только одно свойство?
Если и делать RaiseAndSetIfChanged то конкретному свойству. Но это должен делать другой триггер, другой модели.

Ещё раз, коротко, если вы ещё не поняли. InvalidCastException говорит о том что вы пытаетесь числовое значение присвоить целому объекту (или наоборот).
0
6 / 5 / 1
Регистрация: 01.10.2021
Сообщений: 76
13.07.2023, 00:04  [ТС] 7
InvalidCastException, говорит что я пытаюсь преобразовать строку в число, если вы еще не поняли. Потому что когда я ввожу цифры, то ошибки не возникает. И у меня уже реализован функционал редактирования данных в бд. И все обновляется, спокойно без ошибок, если конечно там цифры в поле. Еще раз, коротко, если вы еще не поняли. Мне бы как то изменить текст ошибки, которая вылезает, когда значение не может быть преобразовано в decimal.
0
HF
1188 / 776 / 185
Регистрация: 09.09.2011
Сообщений: 2,375
Записей в блоге: 2
13.07.2023, 15:53 8
Лучший ответ Сообщение было отмечено 4lehikc как решение

Решение

Цитата Сообщение от 4lehikc Посмотреть сообщение
я пытаюсь преобразовать строку в число, если вы еще не поняли. Потому что когда я ввожу цифры, то ошибки не возникает.
1234 - число? а 1.2345 - число? Все данные находящиеся в TextBox - строки. А он привязать не может к нужному типу.

Ну использйте тогда Converter. Не нужно и не можно "менять текст ошибки". Сами управляйте конвертированием, тогда и ошибку можете изменить.

Документация по конвертерам: Converting Binding Values
2
26 / 11 / 1
Регистрация: 20.05.2015
Сообщений: 211
13.07.2023, 15:59 9
Цитата Сообщение от 4lehikc Посмотреть сообщение
InvalidCastException, говорит что я пытаюсь преобразовать строку в число, если вы еще не поняли. Потому что когда я ввожу цифры, то ошибки не возникает. И у меня уже реализован функционал редактирования данных в бд. И все обновляется, спокойно без ошибок, если конечно там цифры в поле. Еще раз, коротко, если вы еще не поняли. Мне бы как то изменить текст ошибки, которая вылезает, когда значение не может быть преобразовано в decimal.
Самый просто и некрасивый способ - это прибиндится к промежуточному строчному свойству, где уже в Get и Set делать нужные преобразования с нужным конечным свойством.
Ну или свой конвертер, как написали выше.
2
Модератор
Эксперт .NET
15691 / 10866 / 2820
Регистрация: 21.04.2018
Сообщений: 31,904
Записей в блоге: 2
13.07.2023, 16:05 10
Цитата Сообщение от 4lehikc Посмотреть сообщение
И если в textbox у меня пустая строка, то появляется ошибка system.invalidcastexception:
Это встроено в привязки. Если входное значение нельзя конвертировать в целевой тип, то будет выкидываться исключение.
Я сейчас не за компом и точно не помню можно ли "погасить" это исключение настройками привязки, но изменить его точно нельзя.

Можно применить несколько способов решения:
1) самый типовой это предложенный HF. Создать свой конвертер с обратной конвертацией из строки в decimal;
2) Создать свой валидатор который не будет изменять значение, но будет возвращать нужное текстовое описание ошибки валидации;
3) Принимать в VM не decimal, а string. И при изменении строки обрабатывать в VM новую строку.
1
13.07.2023, 16:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2023, 16:05
Помогаю со студенческими работами здесь

Как сделать ,чтобы нажималась клавиша либо#108 или либо #121, а потом закрывалась программа совсем?
uses graph,crt,dos; var gd,gm,x,y:integer; k:char; begin gd:=detect;...

Как сделать так, чтобы при обработке ошибки пользователя возращало обратно на то место, где начинается программа?
Вопрос в шапке. Если что, вот исходный код программы, которая подсчитывает количество слов в txt...

Как сделать, чтобы в случае ошибки увеличения ЗП должна отправлять уведомление администрато­­­ру, но не пользователю­­­?
Задание: Давайте напишем функцию, которая будет увеличивать зарплату сотруднику с наименьшей...

Что мне сделать чтобы избежать этой ошибки?
При запуске проекта падает ошибка в томкат : org.apache.jasper.JasperException: An exception...

Какие ошибки в коде, и что сделать чтобы он заработал?
Здравствуйте, тут одна проблемка возникла. Хочу сделать скрипт, меняющий цвет фона при прокрутке...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru