2011-11-18 25 views
20

tôi có một tài sản trong mô hình của tôi DateTime, nhưng tôi chỉ quan tâm đến việc bán thời gian:Làm cách nào để ngăn chặn thuộc tính xác thực được tạo?

public class MyModel 
{ 
    [Required, DataType.Time] 
    public DateTime Time 
} 

Theo quan điểm của tôi, tôi ra nó như vậy:

@Html.EditorFor(model => model.Time) 

này sử dụng để tạo html sau trong MVC 3:

<input class="text-box single-line" data-val="true" 
    data-val-required="The Time field is required." 
    id="Time" name="Time" type="time" value="" /> 

Bây giờ tôi đang cố gắng này với MVC 4, và đây là html tạo:

<input class="text-box single-line" data-val="true" 
    data-val-date="The field Time must be a date." 
    data-val-required="The Time field is required." 
    id="Time" name="Time" type="time" value="" /> 

Có một thuộc tính bổ sung data-val-date được thêm vào, dẫn đến lỗi xác thực phía ứng dụng khách, bởi vì một thời gian (ví dụ: "10:30") không được định dạng là ngày tháng.

Tôi cho rằng đây là lỗi trong MVC 4 (I reported it)? Nhưng cho đến khi nó được giải quyết, có cách nào để ngăn chặn thuộc tính này được tạo ra không? Hoặc thậm chí tốt hơn, có cách nào để cho nó được tạo ra như là một số data-val-time thay vì vậy, tôi có thể cung cấp phương thức xác thực phía khách hàng của riêng tôi cho các trường thời gian không?

Trả lời

2

Tôi có thể nói tùy chọn tốt hơn là viết chức năng xác thực phía máy khách của riêng bạn. Nếu không, bạn có thể làm một số giả mạo mà tôi sẽ không nói nó là đúng cách nhưng nó có thể giải quyết vấn đề của bạn. Tôi đã có vấn đề tương tự đối với xác nhận MVC nơi tôi muốn thay đổi hành vi của xác nhận phía khách hàng. Xin vui lòng xem các liên kết

Asp.net MVC3 validation

Ý tưởng ở đây là bạn tự thêm các thuộc tính như "data-val-yêu cầu" và "data-val" đến lĩnh vực đầu vào của bạn và sau đó thêm nhắn xác nhận cho nó.

Hy vọng nó sẽ giúp bạn theo một cách nào đó.

Edit:

thử này

Remove cần attr trường từ mô hình

public class MyModel 
{  
    public DateTime Time 
} 

Sau đó, thêm các thuộc tính để kiểm soát của bạn như hình dưới đây

@Html.TextBoxFor(model => model.Time, new Dictionary<string, object> { { "data-val-required", "required" }, { "data-val", "true" }}) 
    @Html.ValidationMessage("Time", "The Time field is required.") 
+0

Cám ơn câu trả lời của bạn, nhưng điều này không thực sự giải quyết vấn đề của tôi ... Tôi muốn có một thuộc tính cụ thể ('data-val-date') để * không * được chèn vào, vì nó được chèn tự động ở đâu đó trong đường ống MVC. – fretje

+0

@fretje thử mã được viết dưới phần chỉnh sửa – pramodtech

4

Không lý tưởng nhưng nó sẽ thực hiện công việc; sử dụng JavaScript trong mẫu chính của bạn để xóa xác thực:

$(document).ready(function(){ 
    $("input[data-val-date]").removeAttr("data-val-date"); 
}); 
1

Tôi đã cố gắng đặt giá trị của trường nhập dưới dạng đối tượng ngày javascript, lần lượt thông qua xác thực xác thực không phô trương.

$("#date-input-field").val(new Date(1,0,1970)); 
$.validator.unobtrusive.parse('#form'); 
var form = $('#form'); 
form.validate(); 

Điều này được thực hiện với jQuery 1.7.2, validation.unobtrusive và mvc4.

Hy vọng điều này sẽ hữu ích.

3

Sử dụng [DataType ("Time")] thay vì [DataType (DataType.DateTime)].Điều này sẽ làm cho MVC không coi biến của bạn là DateTime, và sau đó nó sẽ không tạo thuộc tính "data-val-date".

Về cơ bản [DataType ("Time")] biến biến của bạn thành một loại tùy chỉnh. Tuy nhiên, bạn không thể sử dụng bất kỳ tên chuỗi nào khác cho loại tùy chỉnh. MVC cố gắng phát hiện kiểu cơ bản cho một kiểu tùy chỉnh. Chỉ khi bạn đặt tên loại tùy chỉnh là "Thời gian", nó sẽ từ bỏ việc phát hiện.

1

Cách tốt nhất là đặt ClientValidationEnabledUnobtrusiveJavaScriptEnabled thành sai trong lớp HtmlHelper.

HtmlHelper.ClientValidationEnabled = false; 
HtmlHelper.UnobtrusiveJavaScriptEnabled = false; 
+0

Tôi có mã trong cấu hình của mình. Đặt chúng ra cũng đã hoạt động. –

+0

Nhưng tôi thích chỉ đặt trong Chế độ xem. –

+1

@VitorCanova như bạn mong muốn .. –

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