2009-02-14 36 views
9

Tôi có một hành động điều khiển có DateTime không có giá trị là một trong các tham số đến từ một hộp văn bản trên biểu mẫu của tôi. Tôi nhận thấy rằng nếu người dùng nhập vào "blah" trong hộp văn bản đó thì tôi sẽ nhận được một giá trị Null cho tham số DateTime và lỗi mô hình được tự động thêm vào. Trong trường hợp này lỗi ModelState được thêm vào là "Giá trị 'blah' không hợp lệ".Làm thế nào để bạn tắt hoặc thay thế thông báo lỗi ModelState mặc định trong Asp.net MVC?

Vấn đề của tôi là trang web của tôi hỗ trợ nhiều ngôn ngữ và vì vậy tôi cần phải bản địa hóa lỗi này. Thông thường tôi chỉ xác nhận và thêm các lỗi ModelState bản thân mình nhưng trong trường hợp này tôi dường như không thể loại bỏ nó. Nếu tôi thêm một lỗi ModelState khác cho cùng một hộp văn bản, nó sẽ không hiển thị.

Trả lời

8

tôi phải đồng ý mạnh mẽ với tất cả các câu trả lời bạn nhận được cho đến nay. Không ai trong số họ thực sự trả lời câu hỏi mà bạn đã hỏi, đó là cách bản địa hóa các thông báo lỗi MVC. Bạn có thể dành rất nhiều nỗ lực làm việc xung quanh trường hợp đơn lẻ này của vấn đề, và vẫn có cùng một vấn đề với 50 trường hợp khác của các thông báo lỗi MVC nếu bạn không thực sự bản địa hóa ứng dụng của mình. Chúng được định nghĩa trong MvcResources.resx, được tìm thấy trong thư mục Resources của mã nguồn MVC (hoặc chỉ duyệt qua assembly với Reflector). Đặc biệt, bạn đang tìm kiếm tài nguyên Common_ValueNotValidForProperty. Bạn sẽ bản địa hoá các thông điệp này bằng cách cung cấp một tập hợp vệ tinh cục bộ, giống như cách bạn bản địa hoá bất kỳ ứng dụng .NET nào. Các chi tiết cụ thể về quốc tế hóa/bản địa hóa trong các ứng dụng .NET nằm ngoài phạm vi của câu trả lời này, nhưng có rất nhiều sách về chủ đề này. Làm điều này trong MVC không khác gì so với thực hiện nó trong bất kỳ ứng dụng nào khác, ngoại trừ điều đó, trong hầu hết các trường hợp, các bản địa hóa của khung công tác đã có sẵn. MVC vẫn đang trong giai đoạn thử nghiệm, vì vậy, theo như tôi biết, chỉ có tiếng Anh, vào lúc này. Có lẽ, điều đó sẽ thay đổi sau khi phát hành.

1

Tôi sẽ xóa hộp văn bản cụ thể khỏi danh sách trắng mà bạn chuyển sang mô hình TryUpdateModel/Update và xác thực mô hình đó "bằng tay" thay vì để khung được xác thực theo khung. Ngoài ra, bạn có thể thử lặp lại thông qua bộ sưu tập Lỗi ModelState, tìm bộ lọc bạn muốn xóa và xóa nó - giả sử sử dụng RemoveItem khi bạn tìm ra cái nào bạn muốn loại bỏ.

EDIT: Nếu bạn đang sử dụng ModelBinder mặc định, bạn có thể tự thực hiện. Tôi đã giả định rằng kể từ khi bạn đã tạo ra lỗi mô hình của riêng bạn, bạn đã sử dụng TryUpdateModel/UpdateModel.

0

Tôi có thể gọi ModelState.Clear(); khi bắt đầu hành động. Nhưng, tôi không chắc tôi thích phải làm điều đó trong mỗi hành động.

0

Bạn có thể làm cho tham số DateTime không thể thực hiện được. Sau đó, nếu không có gì được cung cấp, lỗi sẽ không được thêm vào ModelState.

public ActionResult Method(Datetime? date) 
{} 

hơn

public ActionResult Method(Datetime date) 
{} 
Các vấn đề liên quan