|
|
|
MVC 2-3 ModelState.IsValid выдаёт false при использовании IDataErrorInfo interface
|
|||
|---|---|---|---|
|
#18+
Создал сайт с умолчальным шаблоном для учётных записей. Всё работало. Добавил реализацию проверки достоверности через интерфейс IDataErrorInfo - всё работало. Добавил рекапчу, но не внёс проверку правильности её ввода в интерфейс IDataErrorInfo - всё работало. Только если рекапча неправильно введена была, то пользователя просто перебрасывало обратно на заполнение формы регистрации, т. е. надо было как-то дать ему знать, что рекапчу надо правильно ввести. Ввёл проверку рекапчи через IDataErrorInfo так, как показано будет ниже - валидация стала всегда проваливаться. Модель - умолчальная, плюс добавлено свойство CAPTCHA_Validated. Если убрать проверку CAPTCHA_Validated из IDataErrorInfo, то всё будет работать как надо - пользователь будет проходить регистрацию при правильной капче и отправляться на повторную при неправильной. Сама модель (точнее, только проблемное действие регистрации): Код: plaintext 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. 48. 49. 50. 51. Кусок метода контроллера - помечено, где ModelState.IsValid даёт false: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Вот стандартное представление, только предпоследним полем добавил рекапчу: Код: plaintext 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. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. Пройдя в дебаге по коллекции ModelState, нашёл, что элемент, соответствующий ключу CAPTCHA_Validated, имеет значением (value) null, хотя в контроллере я явно присвоил ему true и в модели должна была пройти валидация. Т. е. по идее логика проверки у меня правильно написана, это ModelState с DefaultModelBinder чего-то не может разобраться с моим CAPTCHA_Validated. Что мне делать? Писать свой привязчик модели? Выносить логику валидации капчи за умолчальный привязчик модели? Но второй вариант рушит схему "все проверки - в одном месте". Или, может, как-то можно натравить умолчальный привязчик на моё свойство CAPTCHA_Validated? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2011, 16:08:23 |
|
||
|
MVC 2-3 ModelState.IsValid выдаёт false при использовании IDataErrorInfo interface
|
|||
|---|---|---|---|
|
#18+
Вот покороче листинги. Модель: Код: plaintext 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. Контроллер: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Представление: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2011, 19:08:50 |
|
||
|
|

start [/forum/topic.php?fid=18&fpage=154&tid=1360560]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 253ms |
| total: | 428ms |

| 0 / 0 |
