11

Tôi cần thay đổi định dạng ngày thành dd.MM.yyyy. Tôi nhận được lỗi xác nhận phía khách hàng vì định dạng ngày ASP.NET MVC khác với những gì tôi mong đợi trên máy chủ.Thay đổi định dạng ngày trong ứng dụng ASP.NET MVC

Để thay đổi định dạng ngày ASP.NET MVC tôi đã cố gắng:

Web.config:

<globalization uiCulture="ru-RU" culture="ru-RU" /> 

mẫu:

[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)] 
public DateTime? ServiceCreatedFrom { get; set; } 

biên tập mẫu:

@model DateTime? 
@Html.TextBox(string.Empty, (Model.HasValue 
    ? Model.Value.ToString("dd.MM.yyyy") 
    : string.Empty), new { @class = "date" }) 

Xem:

@Html.EditorFor(m => m.ServiceCreatedFrom, new { @class = "date" }) 

Thậm chí Global.asax:

public MvcApplication() 
{ 
    BeginRequest += (sender, args) => 
     { 
      var culture = new System.Globalization.CultureInfo("ru"); 
      Thread.CurrentThread.CurrentCulture = culture; 
      Thread.CurrentThread.CurrentUICulture = culture; 
     }; 
} 

Không có gì làm việc cho tôi.

+1

tôi đã có một vấn đề tương tự: http://stackoverflow.com/questions/13623381/unobtrusive- datetime-validation-in-mvc4 – NickD

+0

xấu xí, nhưng có lẽ là cách duy nhất: ( – Andrei

+1

có, một cách xấu xí. điều này nên được thực hiện bởi khuôn khổ ;-) – NickD

Trả lời

12

Sau đây nên làm việc:

[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)] 
public DateTime? ServiceCreatedFrom { get; set; } 

và trong mẫu soạn thảo của bạn:

@model DateTime? 
@Html.TextBox(
    string.Empty, 
    ViewData.TemplateInfo.FormattedModelValue, 
    new { @class = "date" } 
) 

và sau đó:

@Html.EditorFor(x => x.ServiceCreatedFrom) 

Đối số thứ hai bạn đã đi qua cuộc gọi EditorFor doesn không làm những gì bạn nghĩ.

Đối với mẫu trình chỉnh sửa tùy chỉnh này, vì bạn đã chỉ định định dạng rõ ràng trên thuộc tính mô hình chế độ xem của mình, phần tử <globalization> trong web.config của bạn và văn bản chuỗi hiện tại sẽ có hiệu lực 0. Văn bản chuỗi hiện tại được sử dụng với các mẫu chuẩn và khi bạn không ghi đè định dạng với thuộc tính [DisplayFormat].

+0

Hehe Tôi biết ai đó sẽ nhanh hơn :). – sammy34

+0

Cảm ơn câu trả lời. Nhưng tôi vẫn nhận được ngoại lệ xác nhận, chỉ vì ứng dụng mong đợi MM.dd.yyyy – Andrei

+0

Liệu có quá mức cần thiết để thêm một mô hình tùy chỉnh cho trường hợp này không? Tôi không chắc chắn nếu mô hình mặc định chất kết dính xem xét văn hóa hiện tại. – sammy34

1

Là một trợ giúp tiềm năng để xác định sự cố, bạn có thể: 1. Đặt điểm ngắt tại điểm bạn đang định định ngày 2. Sử dụng thứ gì đó giống như Cửa sổ ngay lập tức trong Visual Studio để đánh giá giá trị của

Thread.CurrentThread.CurrentCulture.Name 

Nếu bạn làm điều này, nó có trở lại với văn hóa "ru-RU" không?

Tôi chắc chắn tôi không phải là người duy nhất sẵn lòng giúp bạn làm việc thông qua việc gỡ lỗi này. Điều đó nói rằng, có lẽ ai đó nhanh hơn tôi có thể thấy vấn đề ngay lập tức :).

Chỉnh sửa: Dường như bạn đang sử dụng Dao cạo, vì vậy bạn có thể đặt điểm ngắt trực tiếp trong tệp xem trên dòng nơi bạn đang cố định dạng ngày.

Chỉnh sửa # 2:

Có thể có một cách sạch hơn để làm điều này, nhưng nếu các dữ liệu mẫu đã được đăng tải trong dd.MM.yyyy sau đó bạn có thể cần một mô hình tùy chỉnh chất kết dính, một cái gì đó như:

public class CustomModelBinder : DefaultModelBinder 
    { 
     public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
     { 
       // custom bind the posted date  
     } 
} 

... sau đó sẽ được chỉ định làm chất kết dính mô hình, ví dụ: ApplicationStart trong Global.asax.cs.

Hãy cho tôi biết nếu bạn cho rằng điều này có thể hữu ích và tôi có thể xây dựng.

+0

Văn hóa là ru-RU. Tôi đã kiểm tra :) – Andrei

1

cuối cùng this một làm việc cho tôi để có được điều này dd/mm định dạng/yyyy i sử dụng date = string.Format("{0}/{1}/{2}", Model.Value.Day, Model.Value.Month, Model.Value.Year);

đầu tiên tạo thư mục EditorTemplates trong SharedFolder, sau đó tạo ra một trình soạn thảo Datetime mẫu trong Sharedfolder/EditorTemplates/Datetime.cshtml sau đó làm theo các liên kết ở trên.

theo quan điểm

@Html.EditorFor(x => x.ServiceCreatedFrom)

hy vọng giúp một ai đó.

1

Bạn có thể thay đổi nền văn hóa hiện tại trong tập tin Global.asax của bạn, cho mức ứng dụng Ví dụ,

using System.Globalization; 
using System.Threading; 

protected void Application_BeginRequest(Object sender, EventArgs e) 
{  
    CultureInfo newCulture = (CultureInfo) System.Threading.Thread.CurrentThread.CurrentCulture.Clone(); 
    newCulture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy"; 
    newCulture.DateTimeFormat.DateSeparator = "-"; 
    Thread.CurrentThread.CurrentCulture = newCulture; 
}