2012-09-26 9 views
5

come evitare la generazione dell'attributo html "data-val-date" per l'elemento creato da una proprietà Datetime?ASP.NET MVC 4 evitare la generazione di data-data-data per datetime

Il modello:

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "Date of birth")] 
    public DateTime? DateOfBirth { get; set; } 
} 

La vista:

@Html.LabelFor(m => m.DateOfBirth) 
@Html.EditorFor(m => m.DateOfBirth) 

In realtà, io sto creando un elemento di tre menu a tendina per selezionare la data di nascita, che non danno un valore in un formato data. Alcune soluzioni che ho visto consistevano in una soluzione: rimuovere la convalida con un javascript. La soluzione che immagino è dividere la proprietà DateTime in tre lunghe per ciascun valore (giorno, mese, anno).

risposta

0

data-val-date viene utilizzato dal sistema di convalida per convalidare la data. Se lo rimuovi, la convalida sul lato client non funzionerà.

Se è ciò che si desidera, è sufficiente disabilitare la convalida sul lato client.

+0

Ok, grazie per la rapida risposta. Disabilitare la validazione lato client avrà effetto su ogni elemento? Al mio fianco, opto per un nuovo oggetto contenente i miei tre valori e sostituendo il datetime. – bado

+0

@bado - mi dispiace, non capisco cosa intendi. –

+0

Devo precisare, ho appena iniziato in web technos. Intendevo se disabilitavo la validazione lato client, tutti i dati val (di tutti gli elementi sul modulo) non avranno alcun effetto? – bado

12

Ok, questo mi ha portato un pomeriggio di lavoro ... apparentemente mvc4 ha deciso che era giunto il momento di eseguire il rendering di data-val-date = "Message" su OGNI proprietà datetime sul viewmodel. Ho provato a modificare questo comportamento predefinito ma non ci sono riuscito.

Ciò ha risolto i miei problemi:

$.validator.addMethod('date', 
    function (value, element) { 
     return true; // since MVC4 data-val-date is put on EVERY vm date property. Default implementation does not allow for multiple cultures... 
    }); 

È anche provare a scrivere il proprio editor di modelli denominato "DateTime.cshtml" nella cartella EditorFor condivisa, ma non usare TextBoxFor lì, perché quella è inquinato pure.

+0

Preferisco questa soluzione perché disabilita solo la causa del problema. La convalida lato client offre un'esperienza utente migliore e riduce i post-back sul server, quindi è necessario evitare la disattivazione dell'intero processo. –

+0

ancora utile + 1 volta – user2695433

0

Aggiungilo all'avvio dell'applicazione nel file global.asax e il modulo dovrebbe attivarsi.

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;