Pregunta

Tengo un proyecto ASP.NET MVC3 donde hago una edición a granel en una tabla con un auge de Knockout.Quiero hacer validaciones como las validaciones requeridas y numéricas al guardar datos.¿Hay alguna forma más fácil de eliminar las validaciones? PD: No estoy usando formularios.

¿Fue útil?

Solución

Echa un vistazo a knockout-validation que configura limpiamente y usa lo que se describe en el Documentación de KOOKOUT .Bajo: Ejemplo en vivo 1: Forzar la entrada para ser numérico

Puede verlo en vivo en Fiddle

update : el violín se ha actualizado para usar el último ko 2.0.3 y ko.validation 1.0.2 usando la URLS de CloudFare CDN

para configurar ko.validation:

ko.validation.rules.pattern.message = 'Invalid.';

ko.validation.configure({
    registerExtenders: true,
    messagesOnModified: true,
    insertMessages: true,
    parseInputAttributes: true,
    messageTemplate: null
});

Para configurar las reglas de validación, use extensores.Por ejemplo:

var viewModel = {
    firstName: ko.observable().extend({ minLength: 2, maxLength: 10 }),
    lastName: ko.observable().extend({ required: true }),
    emailAddress: ko.observable().extend({  // custom message
        required: { message: 'Please supply your email address.' }
    })
};

Otros consejos

Si no quiere usar la biblioteca de RockOutvalidation, puede escribir el suyo.Aquí hay un ejemplo para un campo obligatorio.

Agregue una clase JavaScript con todas las extensiones o extensiones de KO, y agregue lo siguiente:

ko.extenders.required = function (target, overrideMessage) {
    //add some sub-observables to our observable
    target.hasError = ko.observable();
    target.validationMessage = ko.observable();

    //define a function to do validation
    function validate(newValue) {
    target.hasError(newValue ? false : true);
    target.validationMessage(newValue ? "" : overrideMessage || "This field is required");
    }

    //initial validation
    validate(target());

    //validate whenever the value changes
    target.subscribe(validate);

    //return the original observable
    return target;
};

Luego, en su vismodel, extiende lo observe:

self.dateOfPayment: ko.observable().extend({ required: "" }),

Hay una serie de ejemplos en línea para este estilo de validación.

La validación de Knockout.js es útil, pero no es robusto.Siempre tiene que crear la réplica de validación del lado del servidor.En su caso (a medida que usa Knockout.js), está enviando datos de JSON al servidor y de regreso de forma asíncrona, para que pueda hacer que el usuario piense que vea la validación del lado del cliente, pero de hecho, sería la validación del lado del servidor asíncrono.

Eche un vistazo al ejemplo aquí upida.cloudapp.net:8080/org.upida.example.knockout/order/create?clientid=1 Este es un enlace de "Crear orden".Intenta hacer clic en "Guardar" y jugar con productos. Este ejemplo se realiza utilizando la biblioteca UPIDA (hay versión MVC Spring y ASP.NET MVC de esta biblioteca) desde CodePlex.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top