2013-07-10 23 views
6

Tại Bộ điều khiển của tôi, tôi thêm một số Lỗi ModelState. Vì vậy, khi tôi hiển thị Chế độ xem của mình, tôi muốn nhận tất cả các lỗi này và thay đổi màu của nhãn của các trường có lỗi.Nhận tất cả Lỗi ModelState trên màn hình

Vì vậy, tôi nghĩ rằng tôi cần phải nhận tất cả các lỗi ModelState, lấy tên trường và sau đó thay đổi màu. Đây là một cách tốt?

Làm cách nào để có lỗi ModelState trong chế độ xem của tôi?

Trả lời

16

Bạn có thể truy cập thông qua ViewData.ModelState. Nếu bạn cần kiểm soát nhiều hơn với các lỗi trên quan điểm của bạn, bạn có thể sử dụng

ViewData.ModelState.IsValidField("name_of_input")

hoặc có được một danh sách các đầu vào với các lỗi như thế này:

var errors = ViewData.ModelState.Where(n => n.Value.Errors.Count > 0).ToList(); 
+1

xem thêm http://stackoverflow.com/questions/1352948/how-to-get-all-errors-from-asp-net-mvc-modelstate – Alexey

8

Tại điều khiển của tôi, tôi thêm một số ModelState Lỗi. Vì vậy, khi tôi hiển thị Chế độ xem , tôi muốn nhận tất cả các lỗi này và thay đổi màu của nhãn của các trường có lỗi.

Đó chính xác là những gì sẽ xảy ra nếu bạn thêm lỗi mô hình có cùng khóa chính xác trong ModelState làm trình trợ giúp Html.ValidationMessageFor bạn đã sử dụng trong chế độ xem của mình.

Vì vậy, ví dụ chúng ta hãy giả sử rằng trong hình thức của bạn, bạn đã có đoạn mã sau:

@Html.LabelFor(x => x.Bazinga) 
@Html.EditorFor(x => x.Bazinga) 
@Html.ValidationMessageFor(x => x.Bazinga) 

và trong HttpPost controller action của bạn, bạn có thể thêm các thông báo lỗi sau để làm nổi bật những lĩnh vực Bazinga:

ModelState.AddModelError("Bazinga", "Please enter a valid value for the Bazinga field"); 

Và nếu bạn muốn thêm một số thông báo lỗi chung chung mà không liên quan đến một số lĩnh vực đầu vào cụ thể mà bạn luôn luôn có thể sử dụng @Html.ValidationSummary() helper ở phía trên cùng của mẫu của bạn để hiển thị nó. Và trong hành động điều khiển của bạn:

ModelState.AddModelError(string.Empty, "Some generic error occurred. Try again."); 
+0

Nice! Nhưng tôi cần phải nhận được các lỗi, không sử dụng ValidationMessageFor. Đây là một ví dụ điển hình –

Các vấn đề liên quan