6 / 5 / 1
Регистрация: 01.10.2021
Сообщений: 76
|
||||||
1 | ||||||
Как переопределить текст ошибки, либо сделать, чтобы ошибки не возникало?12.07.2023, 21:14. Показов 882. Ответов 9
У меня есть свойства в модели типа decimal. И если в textbox у меня пустая строка, то появляется ошибка system.invalidcastexception: " is not a valid number. Я уже понял, что это проблема с невозможностью преобразования строки в decimal. Так вот мне нужно понять как можно переопределить текст ошибки, либо просто сделать, чтобы этой ошибки не возникало. Я уже пробовал создать кастомный validationattribute и переопределял IsValid, чтобы добавить свое сообщение ошибки, но все равно возникало system.invalidcastexception: " is not a valid number. Ну вот допустим пример свойства:
0
|
12.07.2023, 21:14 | |
Ответы с готовыми решениями:
9
Как сделать, чтобы не выдавало ошибки? Как сделать, чтобы при столкновении двух объектов не возникало сил, которые их отталкивают друг от друга? Как сделать, чтобы сериализация не заканчивалась после первой ошибки? как сделать так, чтобы вместо #ошибки выводило 0(ноль)? Как сделать чтобы из двух текстов созданными функциями, вывести третий текст, либо вернуть значения обратно в main? |
12.07.2023, 21:32 | 2 |
Ваши валидаторы сработают после того как было выполнено преобразование к типу. А 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 через привязку
0
|
6 / 5 / 1
Регистрация: 01.10.2021
Сообщений: 76
|
||||||
12.07.2023, 22:06 [ТС] | 5 | |||||
0
|
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
|
13.07.2023, 15:53 | 8 |
Сообщение было отмечено 4lehikc как решение
Решение
1234 - число? а 1.2345 - число? Все данные находящиеся в TextBox - строки. А он привязать не может к нужному типу.
Ну использйте тогда Converter. Не нужно и не можно "менять текст ошибки". Сами управляйте конвертированием, тогда и ошибку можете изменить. Документация по конвертерам: Converting Binding Values
2
|
26 / 11 / 1
Регистрация: 20.05.2015
Сообщений: 211
|
|
13.07.2023, 15:59 | 9 |
Самый просто и некрасивый способ - это прибиндится к промежуточному строчному свойству, где уже в Get и Set делать нужные преобразования с нужным конечным свойством.
Ну или свой конвертер, как написали выше.
2
|
Модератор
|
|
13.07.2023, 16:05 | 10 |
Это встроено в привязки. Если входное значение нельзя конвертировать в целевой тип, то будет выкидываться исключение.
Я сейчас не за компом и точно не помню можно ли "погасить" это исключение настройками привязки, но изменить его точно нельзя. Можно применить несколько способов решения: 1) самый типовой это предложенный HF. Создать свой конвертер с обратной конвертацией из строки в decimal; 2) Создать свой валидатор который не будет изменять значение, но будет возвращать нужное текстовое описание ошибки валидации; 3) Принимать в VM не decimal, а string. И при изменении строки обрабатывать в VM новую строку.
1
|
13.07.2023, 16:05 | |
13.07.2023, 16:05 | |
Помогаю со студенческими работами здесь
10
Как сделать ,чтобы нажималась клавиша либо#108 или либо #121, а потом закрывалась программа совсем? Как сделать так, чтобы при обработке ошибки пользователя возращало обратно на то место, где начинается программа? Как сделать, чтобы в случае ошибки увеличения ЗП должна отправлять уведомление администратору, но не пользователю? Что мне сделать чтобы избежать этой ошибки? Какие ошибки в коде, и что сделать чтобы он заработал? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |