10

Estoy tratando de obtener una validación no intrusiva del lado del cliente que funcione dentro de un módulo de Orchard, pero he encontrado un problema.Asignaciones de datos del CMS de Orchard: validación del lado del cliente

En este ejemplo, solo intento forzar RequiredAttribute en un campo de cuadro de texto, usando Html.TextBoxFor().

A mi me parece como si el ModelValidatorProvider a medida implementada por Orchard (LocalizedModelValidatorProvider) impide la entrada atributos HTML 5 que haga que resulte, en concreto:

data-val 
data-val-required 

para los DataAnnotations estándar RequiredAttribute. JQuery.validate.unobtrusive requiere estos atributos para que funcionen.

El LocalizedModelValidatorProvider mapea un RequiredAttribute a LocalizedRequiredAttribute, entonces quizás esto sea un error (o una característica no implementada) en el Orchard ViewEngine al renderizar una entrada textbox para una propiedad del modelo decorada con un LocalizedRequiredAttribute?

sospecho que de alguna manera esto no está sucediendo:

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

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

estoy actualmente en ejecución Orchard 1.3.9.

Nota: Una solución hacky es eliminar el registro de la LocalizedModelValidatorProvider en el módulo OrchardStarter y por defecto de nuevo a la norma proveedor de MVC 3, aunque yo estoy dispuesto no perturbar la fuente Orchard, si es posible (no mencionar que podría necesitar mensajes localizados en algún momento) ...

+0

Alguna vez se resolvió esto. Estoy golpeando la misma pared de ladrillo para lograr esto. – Mounhim

+0

No por mí, aunque vale la pena señalar que esto fue en la versión 1.3.9 que tiene casi un año de antigüedad, puede haber sido corregido en las versiones posteriores. El work-around descrito anteriormente estaba bien para mí al final, así que no lo busqué. Probablemente debería haber planteado un error ... –

+0

¿Por qué no probar oforms, tiene funcionalidad de generación de forma dinámica incorporada tiene estrategias de validación incorporadas que puedes definir. https://gallery.orchardproject.net/List/Modules/Orchard.Module.oforms – bijayk

Respuesta

0

Paso 3 semanas para resolver el problema de la validación no intrusiva utilizada en los cuadros de diálogo en MyPrettyCMS.

También uso LocalizedRequiredAttribute como se puede ver en esos AutoGenerated MetaDataModels.

No sé Orcad, pero supongo que presenta los formularios de usuario como JQuery Dialogs como yo.

Hay dos dificultades:

1ª: tienes que (re) campos de diálogo a la forma que va a utilizar para enviar los datos al servidor adjuntar.

2º: tienes que (re) analizar la forma de obtener una validación unobstrusive trabajo

Aquí encontrará una completa JQuery Dialog based Form trabajar con la validación discreto y centrar la línea de $ .validator.unobtrusive.parse (forma) ; Esta fuerza no molesta para analizar los controles agregados ajax.

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

luego buscar el método $ .fn.SaveContent -.> $ ("# DivStructurePage") padre().appendTo (formulario);

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

Añadir este código en tu editor de plantillas Ver

@model ABC.Models.ModelName 
@{ 


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

añadir "jquery.validate.min.js, jquery.validate.unobtrusive.min.js" en el módulo "Scripts" carpeta.

Agregue la configuración siguiente en el archivo Web.cofig.

<appSettings> 
<add key="ClientValidationEnabled" value="true"/> 
<add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings> 
Cuestiones relacionadas