2011-10-24 29 views
23

Tôi đang sử dụng chế độ xem Dao cạo chuẩn MVC3 với xác thực Javascript không phô trương, sử dụng @Html.ValidationSummary để hiển thị chúng ở đầu biểu mẫu. Nếu xác thực tiêu chuẩn (những thứ như [Required]) vượt qua, sau đó tôi chạy một số xác thực phía máy khách rất tùy chỉnh sẽ kích hoạt khi người dùng nhấn nút Gửi. (Việc xác thực xem qua một số phần tử biểu mẫu để đảm bảo rằng bộ thích hợp của chúng đã được kiểm tra, v.v., vì vậy nó không đơn giản như việc tạo trình xác nhận tùy chỉnh mới cho một trường đơn lẻ).Thêm thông báo lỗi vào @ Html.ValidationSummary

Tôi muốn (các) lỗi có thể tôi xây dựng ở đó để được hiển thị trong danh sách ValidationSummary, nhưng tôi không thể tìm ra cách để nhận thông báo lỗi xuất hiện ở đó.

+1

Trong client-side hoặc server-side? –

Trả lời

37

Trong client-side:

function YourCustomValidator() { 
    // do your validation logic here via JavaScript 
    return true; // or false based on your validation logic 
} 
$(document).ready(function() { 
    // take your own form-selector like ("form", this) 
    $("form", this).first().submit(function() { 
     return (YourCustomValidator() && $(this).valid()); 
    }); 
}); 

HOẶC Trong server-side:

Hãy suy nghĩ bạn có một mô hình như thế này:

public class Test { 
    [Required] 
    [StringLength(100)] 
    public string FullName { get; set; } 
} 

và khi bạn đang phê nó:

if(ModelState.IsValid) { // default validations run here 
    if(/* some custom validations run here, there is an error about "FullName" */){ 
     // you should set the "key" for Model-Error to "FullName" 
     ModelState.AddModelError("FullName","error-message goes here") 
    } 
    if(/* some custom validations run here, the error is global, not on "FullName" */){ 
     // you should set the "key" for Model-Error to an empty-string 
     ModelState.AddModelError("","error-message goes here") 
    } 
    // also you can test for model-errors again like this: 
    if(ModelState.IsValid) { // if you add any error above, this will be "false" 

    } 
} 
+3

Cảm ơn - Tôi đang tìm kiếm phía máy khách trong trường hợp này. Câu hỏi của tôi là nếu tôi tìm thấy lỗi trong "YourCustomValidator", làm cách nào để nhận được thông báo lỗi cụ thể của tôi xuất hiện? Tôi đã có xác thực phía máy chủ, cho phép tôi đặt bất kỳ thông báo lỗi nào tôi muốn thông qua "AddModelError", nhưng tôi muốn thực hiện tương đương trong Javascript. – Kras

+0

Bạn có thể tạo một logic tùy chỉnh để hiển thị thông báo lỗi qua JS và/hoặc bạn có thể tạo lớp thuộc tính xác nhận tùy chỉnh thông qua C#. mà một trong những bạn có ý nghĩa? –

+3

cũng được mô tả:] +1 – Shahin

4

Bạn có thể làm như vậy chỉ cần thêm Error Message vào ModelState sẽ hiển thị thông báo lỗi cho bạn, miễn là bạn có ValidationSummary() được gọi trên chế độ xem của bạn.

Để thêm các lỗi cho ModelState chỉ làm điều này:

ModelState.AddModelError("ColumnNameOrErrorMessageKeyInState","error message goes here") 
Các vấn đề liên quan