17

Mam następujący widok w ASP.NET MVC 3:ASP.net MVC Validation Hook

@model Models.CreateProjectViewModel 

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script> 
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script> 

@using(Html.BeginForm()) { 
    @Html.TextBoxFor(m => m.ProjectName) 
    @Html.ValidationMessageFor(m => m.ProjectName) 

    <p> 
     <input type="submit" value="Save" /> 
    </p> 
} 

używam dyskretny javascript z jQuery i ram Zaawansowany Validation.

Po kliknięciu przycisku Zapisz i próba sprawdzenia poprawności kończy się niepowodzeniem, czy jest jakieś zdarzenie, które można podłączyć do wywołania niestandardowego javascript?

function validationFailed() { 
    // do something here only if validation failed 
} 

Jak chciałbym związać do walidacji tak, że gdy nie powiodło się (i tylko wtedy, gdy nie powiodła się) można nazwać funkcję mój validationFailed().

+0

Co dokładnie próbujesz zrobić? Wiem, że chcesz uruchomić trochę javascriptu, jeśli się nie powiedzie, ale co próbujesz osiągnąć, robiąc to? –

Odpowiedz

3

Można użyć invalidHandler, uważam, że jest w walidacji jquery.

invalidHandler oddzwaniania
oddzwaniania dla kodu niestandardowego gdy nieprawidłowy formularz jest składany. Nazwany z obiektem zdarzenia jako pierwszym argumentem i walidatorem jako sekund.

+0

Jeśli używam Adnotacji danych lub Fluent Validation, czy to przeszkadza mi w tworzeniu podglądu programu obsługi w moim widoku? – Dismissile

+0

To będzie tylko wywołanie zwrotne, które zostanie uruchomione, gdy przesłany formularz jest nieprawidłowy. Wszystkie walidacje tworzone przez adnotacje danych itp. Będą działać normalnie. –

+0

To nie działa. Kiedy dodaję funkcję validate() do mojego formularza, po prostu zostanie ona zignorowana. Wydaje mi się, że istnieje konflikt między moją funkcją sprawdzania poprawności, którą tworzą adnotacje danych, a tą, którą próbuję dodać ręcznie. – Dismissile

35

Jak docs jQuery/Validation mówi, można użyć invalidHandler reagować gdy nieprawidłowy formularz jest składany.

Ale ponieważ MVC dyskretne sprawdzanie oryginalności tworzy samo walidację, należy je później zahaczyć.

Korzystanie z dokładnie tego samego mechanizmu co jQuery/Validation: można powiązać swój kod z niestandardowymi zdarzeniami w formularzu formularza "invalid-form.validate", co oznacza, że ​​odpowiada on invalidHandler!

$(document).ready(function() { 
    $('#myform').bind('invalid-form.validate',function(){ 
     alert('invalid form!'); 
    }); 
}); 

aby dać stanowią korzystanie ID:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myform" })) { 
} 

UPDATE:

Alternatywnym sposobem uzyskania istniejący obiekt walidacji dzwoni validate() Na formularzu. Jeżeli walidator dla tej formy został już utworzony, zostanie on zwrócony:

Edycja: po inicjalizacji wystąpił, zmieniając .settings.invalidHandler jest zbyt późno na wiążące. Tak więc poniższy fragment nie będzie już działał, chyba że ponownie zainicjujesz walidator.

$(document).ready(function() { 
    var existingValdiation = $("#myform").validate(); 
    //the settings property corresponds to the options parameter 
    existingValdiation.settings.invalidHandler = function (form) { 
     alert('invalid form!'); 
    }; 
    // not recommended: 
    // re-init would bind settings.invalidHandler to 'invalid-form.validate' 
    // existingValdiation.init(); 
}); 
+0

Pierwsza opcja działała świetnie! :) –

+0

Dziękuję. Pierwsza opcja była dla mnie idealna. = -) –

+0

Pierwsza opcja działała. Drugi nie. Czy należy edytować alternatywę lub ją usunąć? Dzięki za pierwszą. –