2009-07-14 26 views
38

Tôi thích viết chức năng xác nhận trong bộ điều khiển của mình, sửa đổi ModelState nếu xác thực không thành công. Ví dụ:Điểm của tham số khóa trong ModelState.AddModelError trong ASP.NET MVC là gì?

private bool ValidateMoney(string raw, string name, decimal min, decimal max) { 
    try { 
     var dec = Convert.ToDecimal(raw); 

     if (dec < min) { 
      throw new ArgumentOutOfRangeException(name + " must be >= " + min); 
     } 
     else if (dec > max) { 
      throw new ArgumentOutOfRangeException(name + " must be <= " + max); 
     } 
    } 
    catch (Exception ex) { 
     ModelState.AddModelError(name, ex.GetUserMessage()); 
    } 
    return ModelState.IsValid; 
} 

Nhưng, tôi không bao giờ biết những gì để đặt cho rằng ngu ngốc "chìa khóa" để lập luận ModelState.AddModelError. (Trong ví dụ này, tôi chỉ đặt nó vào tên hiển thị giao diện người dùng của mình.)

Các nhà phát triển MVC nghĩ gì khi họ thêm vào?

+3

Luận điểm quan trọng là không ngu ngốc chút nào, có thể là tài liệu không phải là rõ ràng như nó phải được. :) – splattne

Trả lời

52

Khóa được sử dụng bởi Trình trợ giúp HTML ValidationMessage để biết thông báo lỗi chính xác hiển thị.

Ví dụ:

<%=Html.TextBox("Name") %> <br /> 
<%=Html.ValidationMessage("Name") %> 

các helper ValidationMessage sẽ hiển thị thông điệp rằng có chìa khóa "Tên" trong từ điển ModelState.

+6

Xác thực được sử dụng trong tất cả các loại ứng dụng, không chỉ blog. –

+2

@Frank trân trọng, không phải là tính năng thú vị? Lỗi hiển thị ngay bên cạnh trường bạn muốn! Tôi đã học được điều này chỉ sau khi google đưa tôi đến câu hỏi này. – gideon

+4

khóa có thể là một chuỗi rỗng, nhưng không được rỗng. Nếu khóa là một chuỗi rỗng, nó có thể được nhìn thấy bằng cách sử dụng Html.ValidationSummary (false) html helper –

9

Tham số key có thể được sử dụng để liên kết lỗi xác thực với trường biểu mẫu.

Nếu bạn đã sử dụng @Html.TextBoxFor (hoặc tương tự) và @Html.ValidationMessageFor, bạn có thể nhận giá trị của khóa từ HTML name của trường đang được xác thực (sử dụng Kiểm tra phần tử).

Nếu bạn vừa mới sử dụng HTML <input>, bạn có thể thêm trình giữ chỗ xác thực bằng cách sử dụng @Html.ValidationMessage("AKeyIMadeUp") và nhận thông báo xuất hiện trong đó như sau: ModelState.AddModelError("AKeyIMadeUp", "The value you entered is no good");.

1

Trên thực tế bạn có thể đặt bất kỳ thông báo xác nhận khi nộp mẫu của bạn không thành công giả sử bạn thực hiện một lĩnh vực trong mô hình

[Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Current password")] 
    public string OldPassword { get; set; } 

và trong khi ModelState của bạn có hợp lệ bạn có thể thiết lập thông báo lỗi ràng buộc với điều đó lĩnh vực như như.

ModelState.AddModelError("OldPassword", "Current Password do not match "); 

sau đó thông báo lỗi của bạn sẽ được liên kết với trường trong mô hình có tên là "OldPassword"

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