10

Tôi đang cố gắng để xác thực phía máy khách không hoạt động trong mô-đun Orchard, nhưng tôi đã gặp sự cố.Chú thích dữ liệu CMS của CMS - Xác thực phía máy khách

Trong ví dụ này tôi chỉ đang cố gắng thực thi RequiredAttribute trên trường hộp văn bản, sử dụng Html.TextBoxFor().

Có vẻ với tôi như thể ModelValidatorProvider tùy chỉnh được thực hiện bởi Orchard (LocalizedModelValidatorProvider) ngăn chặn các thuộc tính đầu vào HTML5 khỏi bị trả lại, cụ thể là:

data-val 
data-val-required 

cho DataAnnotations chuẩn RequiredAttribute. Các thuộc tính này được yêu cầu bởi jQuery.validate.unobtrusive để làm việc.

LocalizedModelValidatorProvider ánh xạ thuộc tính RequiredAttribute thành LocalizedRequiredAttribute, vì vậy có lẽ đây là lỗi (hoặc tính năng chưa được thực hiện) trong Orchard ViewEngine khi hiển thị đầu vào hộp văn bản cho thuộc tính mô hình được trang trí bằng LocalizedRequiredAttribute?

Tôi nghi ngờ rằng bằng cách nào đó điều này không xảy ra:

tagBuilder.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata)); 

(từ System.Web.Mvc.Html.InputExtensions)

Tôi hiện đang chạy Orchard 1.3.9.

Lưu ý: Một workaround hacky là để loại bỏ các đăng ký của LocalizedModelValidatorProvider trong module OrchardStarter và mặc định trở lại với tiêu chuẩn nhà cung cấp MVC 3, mặc dù tôi quan tâm không làm phiền các nguồn Orchard nếu có thể (không đề cập đến tôi có thể cần thư được bản địa hóa tại một số thời điểm) ...

+0

Đã bao giờ được giải quyết chưa. Tôi đang va vào bức tường gạch để đạt được điều này. – Mounhim

+0

Không phải bởi tôi - mặc dù điều đáng chú ý là trong phiên bản 1.3.9 gần một năm tuổi - nó có thể đã được sửa trong các phiên bản sau. Các công việc xung quanh được mô tả ở trên là ok cho tôi cuối cùng vì vậy đã không theo đuổi nó - tôi có lẽ nên đã đưa ra một lỗi ... –

+0

Tại sao không cố gắng của sâu, nó có inbuilt năng động hình thức chức năng nó có sẵn chiến lược xác nhận bạn có thể định nghĩa. https://gallery.orchardproject.net/List/Modules/Orchard.Module.oforms – bijayk

Trả lời

0

Tôi dành 3 tuần để giải quyết vấn đề xác thực không sử dụng được sử dụng trong hộp thoại trong MyPrettyCMS.

Tôi cũng sử dụng LocalizedRequiredAttribute như bạn có thể thấy trong những AutoGenerated MetaDataModels.

Tôi không biết Orcad nhưng tôi đoán nó trình bày biểu mẫu người dùng dưới dạng Hộp thoại JQuery như tôi làm.

Có hai khó khăn:

1 st: bạn phải (lại) đính kèm các lĩnh vực thoại mẫu bạn sẽ sử dụng để gửi dữ liệu đến máy chủ.

thứ 2: bạn phải (tái) phân tích hình thức để có được một xác nhận unobstrusive làm việc

Bạn sẽ tìm thấy ở đây một hoàn JQuery Dialog based Form làm việc với xác nhận unobstrusive và tập trung dòng $ .validator.unobtrusive.parse (theo mẫu) ; Lực này không phô trương để phân tích các điều khiển được thêm vào ajax.

Look $ .fn.jqDialogFunction trong JQuery common tool box

$.fn.jqDialogFunction = function (idDiv, titre, okFunction, openFunction) { 
    var dialogBox = $(idDiv) 
    //$(dialogBox).removeClass("notDisplayed"); 
    $(dialogBox).hide(); 
    $(dialogBox).dialog({ 
     title: titre, 
     autoOpen: false, 
     resizable: false, 
     modal: true, 
     minHeight: 450, 
     minWidth: 800, 
     open: openFunction, 
     buttons: [ 
    { 
     text: "Ok", 
     click: okFunction 
    } 
      , 
      { 
       text: "Cancel", 
       click: function() { 
        $(this).dialog("close"); 
       } 
      } 
    ] 
    }); 
    var form = dialogBox.find("form"); 
    if (form != null) { 
     $.validator.unobtrusive.parse(form); 
    } 
    $(idDiv).dialog('open'); 
} 

Sau đó Nhìn phương pháp $ .fn.SaveContent -.> $ ("# DivStructurePage") mẹ().appendTo (mẫu);

$.fn.SaveContent = function() { 
    $(this).dialog("close"); 
    var content = tinyMCE.activeEditor.getContent(); 
    $("#hidNewContent").val(content); 
    var v = $("#StructurePage_FK_LayoutMenu_Translation").val(); 
    var form = $("#frmManagedContent"); 
    $("#divStructurePage").parent().appendTo(form); 
    form.attr("action", "/"+ $("#hidControllerName").val() +"/Save/" + v); 
    form.submit(); 
} 
0

Thêm mã này trong Editor của bạn Template Xem

@model ABC.Models.ModelName 
@{ 


Script.Require("jQuery").AtHead(); 
Script.Include("jquery.validate.min.js").AtHead(); 
Script.Include("jquery.validate.unobtrusive.min.js").AtHead(); } 

Add "jquery.validate.min.js, jquery.validate.unobtrusive.min.js" trong mô-đun "Scripts" thư mục của bạn.

Thêm cài đặt bên dưới vào tệp Web.cofig.

<appSettings> 
<add key="ClientValidationEnabled" value="true"/> 
<add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings> 
Các vấn đề liên quan