2013-03-05 13 views
6

mam to działanie kontrolera:C# MVC i DateTime w kontroler działania modelu

[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); 
} 

Akcja zachowuje się normalnie, jeśli nie URL param jest określony, ale kiedy podać jakieś dane, wszystko zostanie ustawione BUTReminderDate. Na przykład, żądanie jest wykonywane z

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

Uwaga: params są szeregowane widok jQuery i zawsze działało dobrze aż do teraz. Po raz pierwszy próbujemy przekazać DateTime z powrotem do akcji kontrolera.

W kontrolerze akcji, model.FKUserId zostanie poprawnie ustawiony, jednak ReminderDate zostanie ustawiony na "0001-01-01T00:00:00.000Z".

Czego mi brakuje?

** Aktualizacja **

Jak się okazało, C# nie będzie działać z ISO sformatowana data ciągów czasowych. Preferuje UTC. Coś takiego jak 2013-03-05T16:23:00.000Z musi zostać wysłane jako u20130305212358000 (EST). Wiązanie również byłoby wystarczające, ale uważam, że jest to najlepsze rozwiązanie.

+0

można krok do kodu? Czy model.ReminderDate ma poprawną wartość przed odesłaniem go do widoku? – TTT

+0

Nie, akcja kontrolera wywoływana jest przez 'model.ReminderDate =" 0001-01-01T00: 00: 00.000Z "' (od samego początku), nawet jeśli parametr URL jest jawnie ustawiony, podobnie jak wszystkie inne argumenty. ., które są poprawnie ustawione w modelu. To tak, jakby parametr adresu URL był po prostu ignorowany. –

+1

Mój zakład dotyczy formatu daty i godziny. Czy to pomoże: http://stackoverflow.com/questions/6076961/pass-date-values-od-ajax-call-to-mvc – TTT

Odpowiedz

2

Można by dostać tę datę 1/1/0001 bo gdy MVC nie może znaleźć wartość dostaw, czy nie można zastosować dostępną wartość z jakiegoś powodu, domyślnie szczątków datą, która jest dla DateTime1/1/0001 lub DateTime.MinValue. Jeśli użyjesz DateTime?, zobaczysz wartość null.

Dobrze byłoby użyć narzędzia Fiddler lub Firebug do sprawdzenia żądania i sprawdzenia, jaka wartość jest wysyłana. Najprawdopodobniej może wymagać korekty. Można również sprawdzić odpowiedź w bieżącym formularzu za pośrednictwem kolekcji Form i ręcznie przekonwertować wartość również.

Niektóre alternatywy to powiązanie modelu MVC (choć niektóre wspominają o tym podejściu). Niektórzy więcej informacji znajduje się na liście poniżej:

+0

Wykonanie działa dobrze. Muszę wiedzieć, że istnieje problem z tym formatem daty, w którym C# nie może go poprawnie przeanalizować (co jest dziwne, ponieważ jest to wartość generowana przez C#). Apparantly, muszę przekonwertować ciąg na inny format, aby kontroler mógł go przekonwertować ... Właściwie pracuję nad rozwiązaniem, ale doceniłbym mieć coś czystszego :) –

+0

Zaktualizowałem mój post powyżej. Jedna osoba stworzyła niestandardowy segregator do obsługi niektórych sytuacji związanych z datą i lokalizacją. Możesz również wziąć to pod uwagę, ponieważ model spoiwa próbuje wprowadzić dane użytkownika i powiązać go z twoją własnością. –

+0

Już to zamykam. Dzięki za wsparcie! –

Powiązane problemy