2013-03-05 19 views
6

Tôi có controller action này:C# MVC và DateTime trong hành động mô hình điều khiển

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

Hành động cư xử bình thường nếu không có param URL được chỉ định, nhưng khi tôi chỉ định một số dữ liệu, tất cả mọi thứ được thiết lập NHƯNGReminderDate. Ví dụ, yêu cầu được thực hiện với

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

Note: params là serialized xem jQuery và luôn luôn làm việc tốt cho đến bây giờ. Đây là lần đầu tiên chúng tôi cố gắng vượt qua một số DateTime quay lại thao tác điều khiển.

Trong bộ điều khiển hành động, model.FKUserId sẽ được đặt chính xác, tuy nhiên ReminderDate sẽ được đặt thành "0001-01-01T00:00:00.000Z".

Tôi đang thiếu gì?

** Cập nhật **

Khi nó bật ra, C# sẽ không làm việc với chuỗi thời gian ngày định dạng ISO. Nó thích những người UTC. Một cái gì đó như 2013-03-05T16:23:00.000Z cần phải được gửi dưới dạng u20130305212358000 (EST). Một ràng buộc cũng đã đủ, nhưng tôi nghĩ đây là giải pháp tốt nhất.

+0

Bạn có thể bước vào mã? Là model.ReminderDate giá trị chính xác trước khi bạn gửi lại cho View? – TTT

+0

không, hành động điều khiển được gọi với 'model.ReminderDate =" 0001-01-01T00: 00: 00.000Z "' (ngay từ đầu) ngay cả khi thông số URL được đặt rõ ràng, giống như tất cả các đối số khác .. được đặt chính xác vào mô hình. Nó giống như nếu tham số URL chỉ bị bỏ qua. –

+1

Đặt cược của tôi là một vấn đề định dạng datetime. Điều này có giúp được không: http://stackoverflow.com/questions/6076961/pass-date-values-from-ajax-call-to-mvc – TTT

Trả lời

2

Bạn sẽ nhận được rằng ngày 1/1/0001 vì khi MVC không thể tìm thấy một giá trị để cung cấp, hoặc không thể áp dụng các giá trị có sẵn đối với một số lý do, còn lại mặc định của ngày, mà cho DateTime1/1/0001 hoặc DateTime.MinValue. Nếu bạn đã sử dụng DateTime?, bạn sẽ thấy null.

Sẽ tốt nếu sử dụng Fiddler hoặc Firebug để kiểm tra yêu cầu và xem giá trị được gửi là gì. Nó rất có thể có thể cần điều chỉnh. Bạn cũng có thể kiểm tra phản hồi của biểu mẫu hiện tại thông qua bộ sưu tập Biểu mẫu và tự chuyển đổi giá trị của chính mình.

Một số lựa chọn thay thế là ràng buộc mô hình MVC (mặc dù một số đề cập đến khuyết điểm đối với phương pháp này). Một số biết thêm được liệt kê dưới đây:

+0

Việc thực hiện hoạt động tốt. Tôi đã biết rằng có một vấn đề với định dạng ngày đó, trong đó C# không thể phân tích cú pháp chính xác (đó là lạ vì nó là một giá trị được tạo bởi C#). Kiểm dịch, tôi cần phải chuyển đổi chuỗi thành một định dạng khác cho bộ điều khiển để có thể chuyển đổi nó trở lại .... Tôi thực sự làm việc trên một giải pháp, nhưng sẽ đánh giá cao để có một cái gì đó sạch hơn :) –

+0

Cập nhật bài viết của tôi ở trên. Một người đã tạo một mô hình tùy chỉnh để xử lý một số tình huống ngày tháng và bản địa hóa. Bạn cũng có thể xem xét vấn đề này, vì trình kết nối mô hình cố gắng lấy đầu vào của người dùng và liên kết nó với thuộc tính của bạn. –

+0

Tôi sẽ đóng cửa ngay bây giờ. Cảm ơn về sự hỗ trợ! –

Các vấn đề liên quan