2011-11-18 28 views
20

Mam właściwość w moim modelu DateTime, ale jestem zainteresowany tylko w części czasu:Jak mogę zapobiec generowaniu atrybutu sprawdzania poprawności?

public class MyModel 
{ 
    [Required, DataType.Time] 
    public DateTime Time 
} 

Moim zdaniem, to wyjście to tak:

@Html.EditorFor(model => model.Time) 

ta służy do generowania następujące html w MVC 3:

<input class="text-box single-line" data-val="true" 
    data-val-required="The Time field is required." 
    id="Time" name="Time" type="time" value="" /> 

teraz próbuję to z MVC 4, a to jest html wygenerowane:

<input class="text-box single-line" data-val="true" 
    data-val-date="The field Time must be a date." 
    data-val-required="The Time field is required." 
    id="Time" name="Time" type="time" value="" /> 

Dodano dodatkowy atrybut data-val-date, który powoduje błąd sprawdzania poprawności strony klienta, ponieważ czas (np. "10:30") nie jest formowana jako data. Jest to błąd w MVC 4 (I reported it). Ale dopóki nie zostanie rozwiązany, czy istnieje sposób, aby zapobiec generowaniu tego atrybutu? A może jeszcze lepiej, czy istnieje sposób na to, aby był generowany jako data-val-time, więc mogę podać moją własną metodę sprawdzania poprawności po stronie klienta dla pól czasu?

Odpowiedz

2

Mogę powiedzieć, że lepszym rozwiązaniem będzie napisanie własnej funkcji sprawdzania poprawności strony klienta. W przeciwnym razie możesz zrobić kilka spoofingów, które nie powiem, że jest to właściwe, ale może rozwiązać twój problem. Miałem podobny problem w odniesieniu do sprawdzania poprawności MVC, gdzie chciałem zmienić zachowanie sprawdzania poprawności strony klienta. Proszę zobaczyć link

Asp.net MVC3 validation

Idea jest ręcznie dodać atrybuty, takie jak „dane-Val-required” i „data-val” na swoim polu tekstowym, a następnie dodać wiadomość walidacji dla niego.

Mam nadzieję, że pomoże ci to w jakiś sposób.

Edit:

spróbować tej

Usuń pole wymagane attr od modelu

public class MyModel 
{  
    public DateTime Time 
} 

Następnie dodać atrybuty do kontroli, jak pokazano poniżej

@Html.TextBoxFor(model => model.Time, new Dictionary<string, object> { { "data-val-required", "required" }, { "data-val", "true" }}) 
    @Html.ValidationMessage("Time", "The Time field is required.") 
+0

Dzięki za odpowiedź, ale to naprawdę nie rozwiązać mój problem ... Chcę konkretnego atrybutu ('data-Val-dzień spełnienia wymogu) do * nie * być wstawiony, jak robi się automatycznie wstawiony gdzieś w rurociągu MVC. – fretje

+0

@fretje wypróbuj kod napisany w sekcji edycji – pramodtech

4

Nie idealne, ale zrobi to; używać JavaScript w szablonie głównym usunąć walidacji:

$(document).ready(function(){ 
    $("input[data-val-date]").removeAttr("data-val-date"); 
}); 
1

Próbowałem ustawienie wartości pola wejściowego jako javascript date obiektu, który z kolei przeszedł walidację w dyskretny walidacji.

$("#date-input-field").val(new Date(1,0,1970)); 
$.validator.unobtrusive.parse('#form'); 
var form = $('#form'); 
form.validate(); 

Dokonuje się tego za pomocą jQuery 1.7.2, validation.unobtrusive i mvc4.

Mam nadzieję, że to pomoże.

3

Użyj [DataType ("Czas")] zamiast [DataType (DataType.DateTime)].To sprawi, że MVC nie potraktuje twojej zmiennej jako DateTime, a następnie nie wygeneruje atrybutu "data-val-date".

Zasadniczo [DataType ("Czas")] powoduje, że zmienna jest niestandardowym typem. Jednak nie można użyć żadnej innej nazwy ciągu dla niestandardowego typu. MVC próbuje wykryć typ bazowy dla typu niestandardowego. Tylko wtedy, gdy nazwiesz niestandardowy typ jako "Czas", zrezygnujesz z wykrywania.

1

Najlepszym sposobem jest ustawienie wartości ClientValidationEnabled i UnobtrusiveJavaScriptEnabled na wartość false w klasie HtmlHelper.

HtmlHelper.ClientValidationEnabled = false; 
HtmlHelper.UnobtrusiveJavaScriptEnabled = false; 
+0

Mam je w mojej konfiguracji. Ustawienie ich również działało. –

+0

Ale wolę po prostu ustawić w widoku. –

+1

@VitorCanova jak sobie życzysz .. –

Powiązane problemy