Modelstate.Isvalid Là Gì – Model Validation Trong Asp
Tôi có thể tìm thấy danh sách các lỗi khiến ModelState không hợp lệ ở đâu? Tôi không thấy bất kỳ thuộc tính lỗi nào trên đối tượng ModelState.
Đang xem: Modelstate.isvalid là gì
Về “có thể là 0 lỗi và IsValid == false”: đây là mã nguồn MVC từ https://github.com/Microsoft/referencesource/blob/master/System.Web/ModelBinding/ModelStateDictionary.cs#L37-L41
public bool IsValid { get { return Values.All(modelState => modelState.Errors.Count == 0); }}Bây giờ, có vẻ như nó không thể được. Đó là dành cho ASP.NET MVC v1.
đối với tôi có vẻ như không nên, có gì sai trong Values.All (modelState => modelState.Errors.Count == 0) không?
Lưu ý rằng lỗi có thể là Thông báo hoặc Ngoại lệ; ví dụ Html.ValidationSummary không hiển thị ngoại lệ (tôi đoán vì lý do bảo mật); có lẽ đó là lý do tại sao bạn không thấy lỗi? Làm thế nào để bạn kiểm tra không có lỗi?
Vì bạn có thể đang lập trình trong Visual studio, bạn nên tận dụng khả năng sử dụng các điểm ngắt cho các bước gỡ lỗi dễ dàng như vậy (hiểu vấn đề như trong trường hợp của bạn). Chỉ cần đặt chúng ngay phía trước / tại nơi bạn kiểm tra ModelState.isValid và di chuột qua ModelState. Bây giờ bạn có thể dễ dàng duyệt qua tất cả các giá trị bên trong và xem lỗi nào gây ra lỗi không hợp lệ trả về sai.
Như một phần bổ sung, nếu ErrorMessage không rõ ràng đối với bạn, bạn có thể đi tới các phím và nó sẽ hiển thị cho bạn biết nó đang đề cập đến biến nào.
Dán đoạn mã dưới đây vào ActionResult của bộ điều khiển của bạn và đặt trình gỡ lỗi vào thời điểm này.
Xem thêm: Các Hình Thức Chuyển Phát Nhanh Là Gì? Khái Niệm Dịch Vụ Chuyển Phát Nhanh Là Gì
var errors = ModelState .Where(x => x.Value.Errors.Count > 0) .Select(x => new { x.Key, x.Value.Errors }) .ToArray();
Câu trả lời tốt nhất ở đây, nên được đánh giá cao hơn. Tại sao lại dành thời gian đào qua 5 lớp của đối tượng ModelState trong trình gỡ lỗi khi tôi có thể sửa lỗi từ nó. Tôi muốn có mặt ở đó tất cả các buổi sáng nếu tôi đi theo câu trả lời cao nhất đánh giá
bool hasErrors = ViewData.ModelState.Values.Any(x => x.Errors.Count > 1);hoặc lặp lại với
foreach (ModelState state in ViewData.ModelState.Values.Where(x => x.Errors.Count > 0)) { }
Modelstate sẽ có một khóa “Thuộc tính” và một lỗi liên quan trong từ điển. thông báo lỗi có thể để trống, nhưng số lỗi sẽ phản ánh số thuộc tính không hợp lệ. Bởi vì phương thức ModelStateDictionary.AddModelError nhận một khóa và Chuỗi ngoại lệ hoặc lỗi; nó bắt buộc phải thêm một lỗi mô hình.
Đôi khi một chất kết dính ném ra một ngoại lệ mà không có thông báo lỗi. Bạn có thể truy xuất ngoại lệ bằng đoạn mã sau để tìm hiểu điều gì sai:
(Thường nếu chất kết dính đang cố gắng chuyển đổi các chuỗi thành các kiểu phức tạp, v.v.)
if (!ModelState.IsValid) {var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));// Breakpoint, Log or examine the list with Exceptions. }
Mã này rất hữu ích đối với tôi, nhưng việc lặp lại các lỗi (Ngoại lệ) để lấy từng .Message dẫn đến “tham chiếu đối tượng không được đặt thành phiên bản của đối tượng”. Khi tôi thay đổi z.Exception thành z.ErrorMessage, tôi có thể hiển thị thông báo lỗi.
Đây là giải pháp cho tôi, thay đổi thành z.ErrorMessage, mặc dù tôi không gặp lỗi với z.Exception, chỉ là giá trị null. Có lẽ giá trị cập nhật câu trả lời ban đầu.
Nếu bạn bỏ kiểm tra ModelsState.IsValid và để lỗi, nếu bạn sao chép dòng này ((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrorsvà dán vào phần đồng hồ trong Visual Studio, nó sẽ cho bạn biết chính xác lỗi là gì. Tiết kiệm nhiều thời gian kiểm tra lỗi ở đâu.
Đây là lời khuyên tốt nhất trong chủ đề này. Vấn đề tôi gặp phải là một “.” (dấu chấm) trong UserName
Thuộc tính ModelState trên bộ điều khiển thực sự là một đối tượng ModelStateDictionary. Bạn có thể lặp lại các khóa trên từ điển và sử dụng phương thức IsValidField để kiểm tra xem trường cụ thể đó có hợp lệ hay không.
Xem thêm: ” Đồng Hồ Omega ® Swiss Luxury Watches Since 1848, Đồng Hồ Omega Giá Tốt Tháng 3, 2021
Như vừa xảy ra với tôi – điều này cũng có thể xảy ra khi bạn thêm thuộc tính bắt buộc vào mô hình của mình mà không cập nhật biểu mẫu của bạn. Trong trường hợp này, ValidationSummary sẽ không liệt kê thông báo lỗi.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.