2015-03-14 15 views
7

Hãy nói rằng tôi có mô hình này:Đầu tiên html helper tạo thuộc tính validation client-side, trong khi cái thứ hai không

public class Person 
{ 
    public bool IsApproved { get; set; } 
} 

Và whis mã này, tôi đang cố gắng để render input với check loại:

@Html.CheckBoxFor(x => x.IsApproved) 
@Html.CheckBox("IsApproved") 

Nhưng, kết quả là khác nhau:

// CheckBoxFor result 
<input data-val="true" data-val-required="The IsApproved field is required." id="IsApproved" name="IsApproved" type="checkbox" value="true"> 
<input name="IsApproved" type="hidden" value="false"> 

// CheckBox result 
<input id="IsApproved" name="IsApproved" type="checkbox" value="true"> 
<input name="IsApproved" type="hidden" value="false"> 

Làm thế nào và tại sao, cái đầu tiên tạo thuộc tính cho xác thực phía máy khách, trong khi cái kia thì không?

Cập nhật:

Sau khi trao đổi thứ tự của @Html.CheckBoxFor@Html.CheckBox, thứ tự của các yếu tố đánh dấu không thay đổi.

Trả lời

9

Trình trợ giúp CheckBox() không hiển thị thuộc tính data-val vì biểu mẫu đã hiển thị CheckBoxFor() cho cùng một sản phẩm. Nếu bạn trao đổi thứ tự, các thuộc tính data-val sẽ được hiển thị cho CheckBox() (và không cho CheckBoxFor()).

Sự hiểu biết của tôi là điều này sẽ gây ra vấn đề tiềm ẩn (trùng lặp) với jquery.validation.unobtrusive khi phân tích biểu mẫu.

Trình trợ giúp html cho các điều khiển bên trong gọi phương thức GetUnobtrusiveValidationAttributes()HtmlHelper. From the source code (tôi nhấn mạnh)

Chỉ làm cho thuộc tính nếu không phô trương xác nhận client-side được kích hoạt, và sau đó chỉ nếu chúng ta chưa bao giờ trả lại xác nhận cho một lĩnh vực với tên này theo hình thức này. Ngoài ra, nếu không có bối cảnh mẫu, sau đó chúng ta không thể làm cho các thuộc tính (chúng tôi không có để đính kèm chúng vào)

public IDictionary<string, object> GetUnobtrusiveValidationAttributes(string name, ModelMetadata metadata) 
{ 
+0

Cám ơn một lời giải thích tốt đẹp. Đây là câu trả lời. –

+0

Xin chào @Stephen, Xin lỗi vì đã phân phối lại. Một vài ngày trước, tôi đã đăng một câu hỏi về một vấn đề mà tôi metAsp.net MVC. Bạn có bất kỳ ý tưởng về nó? Bạn có thể nhìn vào nó không? Đây là [câu hỏi] (http://stackoverflow.com/questions/31492648/best-practice-for-using-interface-type-as-model-in-view-and-use-real-type-attrib). –

+0

@FarhadJabiyev, Không có thời gian, nhưng tôi sẽ xem sáng ngày mai :) –

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