Có những lần tôi tìm thấy ModelState của mình không hợp lệ nhưng không thể tìm thấy những gì đã vô hiệu hóa nó vì không có ModelErrors. Cách dễ nhất để xác định điều gì đã làm mất hiệu lực trạng thái mô hình của bạn nếu chính bạn chưa thêm một ModelError?Điều gì có thể khiến ViewData.ModelState.IsValid trở thành false
Trả lời
Nhìn vào asp.net mvc source code, thuộc tính IsValid trên ModelStateDictionary chỉ đơn giản là trả về true hoặc false tùy thuộc vào việc có bất kỳ lỗi nào trong Modelollate ICollection được giữ trong thuộc tính Values hay không.
Bạn sẽ có thể tìm thấy bất kỳ sai sót bao gồm cả tin nhắn và ngoại lệ như thế này:
foreach(var modelStateValue in ViewData.ModelState.Values)
{
foreach(var error in modelStateValue.Errors)
{
// Do something useful with these properties
var errorMessage = error.ErrorMessage;
var exception = error.Exception;
}
}
Tôi đã chạy qua một vấn đề tương tự và sử dụng cùng một loại thói quen mà Steve cung cấp, tìm thấy một ngoại lệ đã được ném (không đúng) một nơi nào đó bên trong các chất kết dính mô hình mặc định mà không thực hiện theo cách của mình vào Html.ValidationSummary.
Vấn đề đặc biệt là tôi có một hộp kéo thả có tùy chọn "Có" hoặc "Không", với các giá trị "1" và "0" (thay vì "true" và "false") và Model Binder bị nghẹn khi cố gắng chuyển đổi chúng thành một boolean (thành viên của thực thể tôi mong đợi), nói rằng 0 không phải là một giá trị hợp lệ cho Boolean.
Tôi đã hy vọng rằng một thông điệp tốt đẹp sẽ được sản xuất cho biết lựa chọn của tôi không hợp lệ, nhưng thay vào đó tôi đã được xử lý cho một ValidationSummary trống. Có vẻ như ngoại lệ đã bị nuốt chửng! (và bây giờ là một cái gì đó tôi sẽ được tìm ra trong tương lai.) Điều này có lẽ nên được nộp với MS như là một lỗi?
Bạn có câu trả lời về điều này không? –
Đây là một vài năm trước, và tôi nhớ lại vấn đề nhưng không chắc tôi nhớ lại câu trả lời. Tôi tin rằng tôi có thể đã kết thúc bằng văn bản một số mã trường hợp đặc biệt để thực hiện xác nhận của riêng tôi, không dựa vào chất kết dính mô hình mặc định nữa cho việc này. (Nghĩa là, hãy kiểm tra Request.Form trực tiếp để tự mình phát hiện ra bất kỳ lỗi nào, giả sử ValidationSummary không phải lúc nào cũng hữu ích.) Điều này đã trở lại MVC 2, không chắc liệu nó vẫn còn theo cách này trong v4? – Funka
- 1. Điều gì khiến MVVM trở nên phù hợp với WPF?
- 2. Điều gì có thể khiến cột IDENTITY bị hỏng?
- 3. Điều gì có thể khiến D3D11CreateDevice() thất bại với E_FAIL?
- 4. điều gì có thể khiến pdb.set_trace() bị bỏ qua?
- 5. Điều gì có thể khiến báo cáo dynamic_cast bị lỗi?
- 6. Điều gì có thể khiến Oracle ROWID thay đổi?
- 7. điều gì sẽ khiến curl trả về false khi cố truy cập tệp cục bộ?
- 8. Nhóm tham gia khiến IQueryable trở thành IEnumerable, tại sao?
- 9. Tỷ lệ CSS3() khiến các div trở thành pixelated
- 10. Điều gì có thể khiến glDrawArrays với một VBO không vẽ được gì?
- 11. Điều gì sẽ khiến tài sản được khai báo (mạnh) của tôi trở thành nil sau lưng tôi?
- 12. Điều gì sẽ khiến Intellij đột nhiên trở nên chậm chạp với scala?
- 13. Điều gì đã trở thành của MSXML 4.0?
- 14. Điều gì có thể khiến màn hình thiết kế quá chậm?
- 15. Điều gì khiến trang hiển thị chậm?
- 16. Điều gì có thể khiến trình biên dịch không tạo ra đầu ra giao diện điều khiển
- 17. Điều gì có thể khiến Double Buffering giết ứng dụng của tôi?
- 18. Điều gì có thể khiến Visual Studio 2008 bị treo khi đang gỡ lỗi?
- 19. Điều gì có thể khiến CGDisplayCreateImageForRect chụp hoặc bỏ qua con trỏ?
- 20. Điều gì có thể khiến các cuộc gọi hệ thống Perl bắt đầu thất bại?
- 21. Điều gì có thể khiến cờ đặt lại TCP/IP (RST) KHÔNG được gửi?
- 22. Điều gì có thể khiến XMLHttpRequest không bao giờ thay đổi trạng thái trong Firefox?
- 23. Điều gì có thể khiến “Tài nguyên tạm thời không khả dụng” trên lệnh send send()
- 24. Điều gì có thể khiến SqlClient tái sử dụng các kết nối không hợp lệ?
- 25. Vấn đề gì có thể khiến chủ sở hữu tệp nib thành không?
- 26. Điều gì khiến tôi không thể sử dụng các thẻ tùy ý trong HTML?
- 27. WPF UIElement.IsHitTestVisible = false; vẫn quay trở lại?
- 28. Knockout & JQueryUI Drag - Điều gì khiến phần tử này không thể kéo được?
- 29. Sự cố khiến trình điều khiển JTDS chấp nhận sendStringParametersAsUnicode = false?
- 30. Có thể đặt async: false thành $ .getJSON gọi
Điều này thật tuyệt vời! +1 – TheOptimusPrimus