10

Próbuję uzyskać dyskretną walidację po stronie klienta działającą w module Orchard, ale mam problem.Orchard CMS DataAnnotations - Walidacja po stronie klienta

W tym przykładzie próbuję tylko wymusić RequiredAttribute na polu textbox, używając Html.TextBoxFor().

Wydaje mi się, że niestandardowego ModelValidatorProvider realizowanego przez Orchard (LocalizedModelValidatorProvider) zapobiega atrybuty wejście HTML5 przed renderowane, a konkretnie:

data-val 
data-val-required 

dla standardowych DataAnnotations RequiredAttribute. Atrybuty te są wymagane do działania przez jQuery.validate.unobtrusive.

LocalizedModelValidatorProvider mapuje RequiredAttribute na LocalizedRequiredAttribute, więc może to błąd (lub niezaimplementowana funkcja) w Orchard ViewEngine podczas renderowania danych wejściowych pola tekstowego dla właściwości modelu ozdobionej LocalizedRequiredAttribute?

Podejrzewam, że jakoś tak się nie dzieje:

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

(od System.Web.Mvc.Html.InputExtensions)

Jestem obecnie działa Sad 1.3.9.

Uwaga: hacky obejście jest usunąć rejestrację LocalizedModelValidatorProvider w module OrchardStarter i domyślne z powrotem do standardowego MVC 3 operatora, chociaż jestem chętni, by nie przeszkadzać źródło Orchard jeśli w ogóle możliwe (nie wspominając, że może potrzebować zlokalizowanych wiadomości w pewnym momencie) ...

+0

Czy kiedykolwiek to rozwiązano. W tym celu uderzam w ten sam mur. – Mounhim

+0

Nie przeze mnie - choć warto zauważyć, że było to w wersji 1.3.9, która ma prawie rok - mogło zostać naprawione w późniejszych wersjach. Opisane powyżej obejście było dla mnie w porządku, więc go nie realizowałem - prawdopodobnie powinienem zgłosić błąd ... –

+0

Dlaczego nie spróbować formorm, ma wbudowaną funkcję generowania dynamicznych formularzy ma wbudowane strategie walidacji, które możesz definiować. https://gallery.orchardproject.net/List/Modules/Orchard.Module.oforms – bijayk

Odpowiedz

0

Spędzam 3 tygodnie, aby rozwiązać problem braku walidacji w oknach dialogowych w MyPrettyCMS.

Używam również LocalizedRequiredAttribute, jak widać w tych AutoGenerated MetaDataModels.

Nie znam OrCADa, ale przypuszczam, że przedstawia on formularze użytkownika jako dialogi JQuery, tak jak ja.

Istnieją dwa problemy:

1 st: trzeba (re) dołączyć pól dialogowych do formularza, który będzie użyty do wysyłania danych do serwera.

2 nd: trzeba (re) analizować formę, aby uzyskać roboczy unobstrusive walidacji

Znajdziesz tutaj kompletną JQuery Dialog based Form pracy z unobstrusive walidacji i skupić się na linii $ .validator.unobtrusive.parse (formularz) ; Ta siła jest niewystarczająca do analizy dodanych elementów sterujących ajax.

Look $ .fn.jqDialogFunction w 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'); 
} 

następnie spojrzeć metoda $ .fn.SaveContent. -> $ ("# divStructurePage") rodzica().appendTo (formularz);

$.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

Dodaj ten kod w edytorze szablonu widoku

@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" w module "Scripts" Folder.

Dodaj poniższe ustawienie w pliku Web.cofig.

<appSettings> 
<add key="ClientValidationEnabled" value="true"/> 
<add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings> 
Powiązane problemy