2013-03-05 18 views
6

ho questa azione di controllo:C# MVC e DateTime controller azione modello

[HttpGet] 
public ActionResult CreateForm(Models.ReminderModel model) 
{ 
    if (model.FkUserId == null && model.FkRoleId == null) { 
     model.FkUserId = UserSession.Current.UserId; 
     model.ReminderDate = DateTime.UtcNow; 
    } 

    return View(model); 
} 

L'azione si comporta normalmente se non viene specificato alcun parametro URL, ma quando ho specificare alcuni dati, tutto viene impostato MAReminderDate. Ad esempio, la richiesta viene eseguita con

model[0][name]:FkUserId 
model[0][value]:2 
.... 
model[2][name]:ReminderDate 
model[2][value]:2013-03-09T10:33:04.934Z 
... 

Nota: i parametri sono vista serializzato jQuery e sempre lavorato bene fino ad ora. È la prima volta che proviamo a passare un DateTime all'azione di un controller.

Nel controller di azioni, model.FKUserId verrà impostato correttamente, tuttavia ReminderDate verrà impostato su "0001-01-01T00:00:00.000Z".

Cosa mi manca?

** Aggiornamento **

Come si è scoperto, C# non funziona con ISO data formattata stringhe di tempo. Preferisce quelli UTC. Qualcosa come 2013-03-05T16:23:00.000Z deve essere inviato come u20130305212358000 (EST). Una rilegatura sarebbe stata sufficiente, ma penso che questa sia la soluzione migliore.

+0

Potete passare nel codice? Model.ReminderDate il valore corretto prima di inviarlo alla vista? – TTT

+0

no, l'azione del controller è invocata con 'model.ReminderDate =" 0001-01-01T00: 00: 00.000Z "' (sin dall'inizio) anche se il parametro URL è impostato in modo esplicito, proprio come tutti gli altri argomenti .. . che sono correttamente impostati nel modello. È come se il parametro URL sia semplicemente ignorato. –

+1

La mia scommessa è un problema di formato datetime. Aiuta questo: http://stackoverflow.com/questions/6076961/pass-date-values-from-ajax-call-to-mvc – TTT

risposta

2

si otterrebbe tale data di 1/1/0001 perché quando MVC non riesce a trovare un valore per la fornitura, o non si può applicare il valore disponibile per qualche motivo, i resti di default della data, che per DateTime è 1/1/0001 o DateTime.MinValue. Se hai usato DateTime?, vedresti null.

Sarebbe bene usare Fiddler o Firebug per ispezionare la richiesta e vedere qual è il valore inviato. Molto probabilmente potrebbe essere necessario aggiustarlo. Puoi anche controllare la risposta del modulo corrente tramite la raccolta Form e convertire manualmente il valore anche tu.

Alcune alternative sono l'associazione modello MVC (anche se alcuni considerano gli svantaggi di questo approccio). Qualche info in più è elencato di seguito:

+0

L'esecuzione funziona bene. Devo sapere che c'è un problema con quel formato di data, dove C# non può analizzarlo correttamente (il che è strano dato che si tratta di un valore generato da C#). A quanto pare, ho bisogno di convertire la stringa in un formato diverso affinché il controller sia in grado di riconvertirlo ... In realtà sto lavorando a una soluzione, ma apprezzerei avere qualcosa di più pulito :) –

+0

Ho aggiornato il mio post qui sopra. Una persona ha creato un raccoglitore modello personalizzato per gestire alcune situazioni di date e localizzazione. Potresti prendere in considerazione anche questo, poiché il raccoglitore modello tenta di prendere in input l'utente e legarlo alla tua proprietà. –

+0

Sto chiudendo questo ora. Grazie per il supporto! –

Problemi correlati