2011-08-17 37 views
7

Tôi có ứng dụng này và định dạng ngày mặc định phải là dd/MM/yyyy (ngôn ngữ là tiếng Bồ Đào Nha Braxin).Mô hình ràng buộc ASP.Net MVC - cách thay đổi định dạng ngày?

Tôi đã thiết lập văn hóa và văn hóa giao diện người dùng thành pt-BR và bây giờ myDate.ToShortDateString() trả lại ngày mà tôi muốn. Tôi không gặp khó khăn khi hiển thị chúng.

Vấn đề là, khi người dùng điền vào trường nhập với ngày tháng như 17/08/2011 và gửi biểu mẫu tham số DateTime đến hành động của tôi trở thành rỗng. Nếu tôi cung cấp ngày theo định dạng 08/17/2011, nó hoạt động tốt.

Làm thế nào tôi có thể làm cho mô hình ASP.Net MVC ràng buộc để phân tích cú pháp ngày của tôi một cách chính xác?

+4

kiểm tra câu trả lời này http://stackoverflow.com/questions/528545/mvc-datetime-binding-with-incorrect-date-format/528560#528560 – dotjoe

+0

Thử giải pháp từ câu hỏi này http://stackoverflow.com/ câu hỏi/6177626/asp-net-mvc-mặc định-model-binder-vấn đề – agradl

Trả lời

10

Tôi tìm thấy những gì happended. Biểu mẫu của tôi đã được đăng qua phương thức GET và MVC chỉ sử dụng văn bản cho thông số hành động khi được truyền vào số RouteData hoặc theo biểu mẫu qua phương thức POST.

Tôi vừa thay đổi biểu mẫu thành phương thức POST và đã hoạt động.

+0

Một ngày bị mất chỉ vì không ai nói rằng phương pháp GET không áp dụng văn hóa. Lưu ngày của tôi .. Cảm ơn, vẫn còn, bạn nên sửa bài viết của bạn, nó hoạt động với POST không với GET. –

+0

Đã sửa. Cảm ơn. – Doug

+0

Thông tin thêm về cách MVC ModelBinder hoạt động và lý do: http://weblogs.asp.net/melvynharbour/mvc-modelbinder-and-localization – webStuff

2

Tôi chắc chắn vấn đề là thiếu DateTimeFormat trên các loại DateTime của bạn.

<input type="text" name="DateProperty" id="DateProperty" 
     value="@(Model.DateProperty.Value.ToString("d", 
      System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat))" /> 

EDIT **

Một điều bạn muốn chắc chắn được rằng cái tên "" tài sản của yếu tố đầu vào của bạn phù hợp với những gì bạn đang đi vào hành động của bạn. Nếu nó không null sẽ xuất hiện trên POST hành động mỗi lần.

 
    [HttpPost] 
    public ActionResult DoStuff(string dateParam) 
    { 
     return RedirectToAction("Home","Index", new { }); 
    } 

"dateParam" phải khớp với thuộc tính tên tại đây.

<input id="dateParam" name="dateParam" value="10/10/2010" /> 
+0

Xuất ngày để HTML không phải là vấn đề. Ràng buộc giá trị đã gửi là. Ngay cả khi tôi làm những gì bạn nói, việc gửi biểu mẫu sẽ không hoạt động như mong đợi. – Doug

5

Hãy thử điều này trên tài sản của mình trong mô hình điểm:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] 
Các vấn đề liên quan