2012-02-28 17 views
10

Próbuję włączyć dyskretną weryfikację javascript dla dynamicznie tworzonych elementów. Problem z javascriptem został już rozwiązany w innym pytaniu SO, a tak nie jest w tym przypadku.ASP.NET MVC Dyskretna walidacja - dlaczego kontekst formularza jest potrzebny?

Dynamiczne tworzenie elementów w tym przypadku to po prostu klonowanie jednego pustego elementu, który jest generowany poza głównym formularzem.

Problem polega na tym, że jeśli użyję pomocników html, takich jak TextBoxFor, CheckBoxFor, ... poza elementem formularza html, atrybuty wymagane do sprawdzenia poprawności do działania (np. data-val-required) nie zostaną wygenerowane.

Sprawdziłem już kod źródłowy MVC i istnieje linia, która zwraca pustą listę atrybutów, jeśli FormContext ma wartość null. (to nie rzuca żadnych wyjątków)

Dlaczego?

Odpowiedz

20

Można ręcznie podrobić kontekst formularza. Na przykład, jeśli miał jakiś częściowy widok, który nie zawiera elementu <form> i która jest wywoływana za pomocą AJAX zregenerować kilka elementów wejściowych można to zrobić:

@model MyViewModel 
@{ 
    ViewContext.FormContext = new FormContext(); 
} 

@Html.LabelFor(x => x.Foo) 
@Html.EditorFor(x => x.Foo) 
@Html.ValidationMessageFor(x => x.Foo) 

odpowiednich elementów wejściowych będzie teraz posiadać atrybuty data-*. Ale to może nie wystarczyć. Jeśli odświeżasz tylko (używając AJAX), tylko część <form>, ale nie zastępująca elementu formularza w wywołaniu DOM $.validator.unobtrusive.parse, nie byłaby wystarczająca. Musisz usunąć wszystkie wcześniejsze potwierdzenia powiązane z tym elementem:

success: function(result) { 
    // we are replacing only a portion of the form 
    $('#somePartOfTheForm').html(result); 

    $('form').removeData('validator'); 
    $('form').removeData('unobtrusiveValidation'); 
    $.validator.unobtrusive.parse('form'); 
} 
+3

Ta odpowiedź powinna zostać przyjęta! – Marko

+0

Dude ... po godzinach korzystania z wszystkich przepisów wokół tego działa jak urok. Dzięki! – Romias

+0

Więcej informacji dodatkowych: http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html – Jowen

Powiązane problemy