Удаленная проверка с нокаутом в MVC 4, позволяющая сохранять недопустимые данные

Привет, я использую удаленную проверку с правилами проверки нокаутом, чтобы проверить, забронирован ли клиент в то же время, что и предложенная дата. Я наконец получил модель представления, отправляющую данные методу проверки контроллера, и метод действительно возвращает истину или ложь, однако я начал замечать, что обратный вызов не мешал пользователю сохранять данные, если клиент недействителен.

Я нашел это, поменяв местами условия и разрешив методу контроллера возвращать false. Я отладил клиентскую сторону и обнаружил, что переменная обратного вызова на самом деле была ложной, но я не получал сообщения об ошибке и не останавливал m от сохранения встречи.

Мой вопрос: мне не хватает кода, который позволяет это сделать, или есть ошибка, которую мне не хватает?

Проверка правила Viewmodel:

ko.validation.rules['validateClientasync'] = {
    async: true,
    message: 'Client is already booked in at this time!',
    validator: function (val, parms, callback) {
        var defaults = {
            url: '/Appointments/CheckClient/',
            type: 'POST',
            contentType: 'application/x-www-form-urlencoded',
            success: function (data) {
                callback(/* true or false depending on what you get back in data */);
            }
        };


        if (parms.data != undefined && parms.data.appointment != undefined) {

            var appointment = ko.toJS(parms.data.appointment);


            $.ajax({
                url: '/Appointments/CheckClient/',
                type: 'post',
                contentType: 'application/x-www-form-urlencoded',
                data: ko.toJS(parms.data.appointment),
                success: function(data) {
                    callback(/* true or false depending on what you get back in data */);
                }
            });
        }


    }
};
ko.validation.registerExtenders();

self.appointment = {
    id: appointment.id,
    start: ko.observable(appointment.start),
    end: ko.observable(appointment.end),
    text: ko.observable(appointment.text),
    clientid: ko.observable(appointment.clientid).extend({
        validateClientasync: {
            data: self
        }
    }),
    employeeid: ko.observable(appointment.employeeid),
    roomid: ko.observable(appointment.roomid),
    fee: ko.observable(appointment.fee).extend({min: 10})
};

person JH_Dev    schedule 12.04.2016    source источник
comment
Где обратный вызов и действительно ли он возвращает false при необходимости?   -  person Neps    schedule 13.04.2016


Ответы (1)


согласно определению в https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Async-Rules, просто поместите json там будет достаточно, например:

callback(
{ 
    isValid: true //true or false with json format returned from the validation method in your controller, 
    message: "your cusotm error message here" 
}
);
person Young Liao    schedule 11.05.2016