2012-09-26 17 views
5

làm cách nào để tránh việc tạo thuộc tính html "data-val-date" cho phần tử được tạo từ một thuộc tính Ngày giờ?ASP.NET MVC 4 tránh tạo dữ liệu-val-date cho datetime

Mô hình:

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "Date of birth")] 
    public DateTime? DateOfBirth { get; set; } 
} 

Quan điểm:

@Html.LabelFor(m => m.DateOfBirth) 
@Html.EditorFor(m => m.DateOfBirth) 

Trong thực tế, tôi là tạo ra một yếu tố ba danh sách thả xuống để lựa chọn ngày tháng năm sinh, mà không đưa ra một giá trị theo định dạng ngày. Một số giải pháp mà tôi đã thấy, bao gồm một công việc xung quanh: loại bỏ xác thực bằng javascript. Giải pháp tôi dự tính là chia thuộc tính DateTime thành ba giá trị dài cho mỗi giá trị (ngày, tháng, năm).

Trả lời

0

dữ liệu-val-date được hệ thống xác thực sử dụng để xác thực ngày. Nếu bạn xóa nó, xác thực phía máy khách sẽ không hoạt động.

Nếu đó là những gì bạn muốn, thì chỉ cần vô hiệu xác thực phía máy khách.

+0

Ok cảm ơn câu trả lời nhanh của bạn. Việc vô hiệu xác thực phía máy khách sẽ có tác dụng trên mọi phần tử? Về phía tôi, tôi chọn một đối tượng mới có chứa ba giá trị của tôi và thay thế ngày giờ. – bado

+0

@bado - tôi xin lỗi, tôi không hiểu ý bạn là gì. –

+0

Tôi phải chính xác, tôi chỉ mới bắt đầu trong kỹ thuật web. Tôi có nghĩa là nếu tôi vô hiệu hóa xác nhận phía máy khách, tất cả dữ liệu-val (của tất cả các phần tử trên biểu mẫu) sẽ không có hiệu lực? – bado

12

Ok, điều này đã cho tôi một buổi chiều làm việc ... dường như mvc4 đã quyết định rằng đã đến lúc kết xuất dữ liệu-val-date = "Message" trên mọi tài sản datetime trên viewmodel. Tôi đã cố gắng sửa đổi hành vi mặc định này nhưng không thành công.

này giải quyết vấn đề của tôi:

$.validator.addMethod('date', 
    function (value, element) { 
     return true; // since MVC4 data-val-date is put on EVERY vm date property. Default implementation does not allow for multiple cultures... 
    }); 

Bạn cũng có thể thử viết mẫu biên tập riêng của bạn có tên là "DateTime.cshtml" trong thư mục EditorFor chia sẻ của bạn, nhưng không sử dụng TextBoxFor ở đó, bởi vì đó là một trong cũng bị ô nhiễm.

+0

Tôi thích giải pháp này vì nó chỉ vô hiệu hóa nguyên nhân của sự cố. Xác thực phía máy khách cung cấp trải nghiệm người dùng tốt hơn và giảm hậu kỳ cho máy chủ của bạn, do đó, việc vô hiệu hóa toàn bộ điều cần tránh. –

+0

vẫn hữu ích + 1 – user2695433

0

Thêm ứng dụng này vào ứng dụng bắt đầu trong tệp global.asax của bạn và biểu mẫu sẽ kích hoạt.

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 
Các vấn đề liên quan