2012-05-09 27 views
5

Tôi có một hành động MVC thực hiện một trong các tham số của nó là DateTime và nếu tôi vượt qua "17/07/2012" là null nhưng không thể có giá trị null nhưng nếu tôi vượt qua 01/07/2012, nó được phân tích cú pháp là Jan 07 2012.Cách an toàn để chuyển thông số ngày tháng cho cuộc gọi ajax đến một hành động MVC

Tôi đang chuyển ngày đến cuộc gọi ajax ở định dạng DD/MM/YYYY, tôi có nên dựa trên định dạng MM/DD/YYYY bất chấp văn hóa được định cấu hình trong web.config không?

Đây là một phương pháp đơn giản và chỉ có một tham số ngày này.

Trả lời

7

Bạn có ba lựa chọn an toàn để gửi tham số ngày trong Asp.NET MVC-:

  • Gửi nó như YYYY/MM/DD đó là tiêu chuẩn ISO cho những ngày quốc tế.
  • Sử dụng yêu cầu POST thay vì yêu cầu GET.

  • Nếu bạn muốn thay đổi cách mặc định Model Binder liên kết ngày:

bạn có thể thay đổi mô hình mặc định chất kết dính để sử dụng văn hóa người dùng bằng IModelBinder

public class DateTimeBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
     var date = value.ConvertTo(typeof(DateTime), CultureInfo.CurrentCulture); 

     return date;  
    } 
} 

Và trong toàn cầu .Asax viết:

ModelBinders.Binders.Add(typeof(DateTime), new DateTimeBinder()); 
ModelBinders.Binders.Add(typeof(DateTime?), new DateTimeBinder()); 

Đọc thêm tại this excellent blog mô tả lý do tại sao nhóm khung Mvc triển khai Văn hóa mặc định cho tất cả người dùng.

1

Câu trả lời của gdoron là đúng cho các ngày chuyển qua dưới dạng truy vấn. Nếu chúng được chuyển thành giá trị biểu mẫu, tuy nhiên (giá trị bài) thì văn bản chính xác nên được sử dụng (giả sử văn hóa là thuộc tính được cấu hình).

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