2009-07-14 5 views
4

닷넷 MVC DateTime 모델 바인더에서 기본 입력 형식을 어떻게 변경합니까?

나는 꽤 표준 .Net MVC 컨트롤러 메서드가 :

public ActionResult Add(Customer cust) { 
    //do something... 
    return View(); 
} 

어디 고객이 뭔가가 :

public class Customer { 
    public DateTime DateOfBirth { get; set; } 
    //more stuff... 
} 

그리고 포함 된 페이지 :

<div><%= Html.TextBox("DateOfBirth") %></div> 

문제는 내 사이트입니다 cust.DateOfBirth는 미국 형식 MM/dd/yyyy로 구문 분석되므로 미국 서버에 있습니다. 그러나 사용자가 영국식 dd/MM/yyyy 형식으로 생년월일을 입력하길 원합니다.

DateTime ModelBinder에서 기본 입력 형식을 변경하거나 자체 사용자 정의 ModelBinder를 만들어야합니까?

답변

4

web.config 파일 또는 페이지 수준에서 culture를 변경할 수 있습니다. 그러나 문화의 다른 측면이 아닌 날짜 형식 만 변경하려면 global.asax 또는 공통 기본 컨트롤러의 코드를 통해 현재 문화권의 DateTimeFormat을 수정하고 "en"의 DateTimeFormat로 설정해야 할 수 있습니다 -GB ".

Reference

는 모든 페이지의 UI 문화와 문화를 설정 Web.config 파일에 세계화 섹션 을 추가 한 다음 uiculture 설정과 문화가 같이 , 속성에 다음 예 :

<globalization uiCulture="en" culture="en-GB" />

은 개인을위한 UI 배양하고 배양을 설정하려면 페이지, 문화 을 설정하고 다음 예와 같이 UICulture는 @ 페이지 지시자의 속성 :

<%@ Page UICulture="en" Culture="en-GB" %>

는 ASP.NET이 모국어로 UI 문화와 문화를 설정하려면 그 현재 브라우저에 이 지정되어 있습니다. 설정은 UICulture 및 Culture를 auto로 설정합니다. 또는 값을 auto : culture_info_name ( culture_info_name은 문화권 이름)으로 설정할 수 있습니다. 문화권 이름 목록은 CultureInfo를 참조하십시오. @ Page 지시문이나 Web.config 파일에서이 설정을 으로 설정할 수 있습니다.

대안 :

CultureInfo.CurrentUICulture.DateTimeFormat 
    = CultureInfo.CurrentCulture.DateTimeFormat 
    = new CultureInfo("en-GB", false).DateTimeFormat; 
+0

감사합니다. @Page 지시문을 사용할 수 없으며 마스터 페이지를 사용하여보기에 배치했습니다. 어떤 아이디어? web.config의 태그는 정상적으로 작동했으며 지금 당장이 작업을 수행했습니다. 그러나 페이지 단위로 작업하도록하고 싶습니다. –

2

당신은 다른 바로 가기 패턴의 의미를 변경할 수 있습니다. 귀하의 경우 짧은 날짜 패턴 또는 "d"가됩니다. 일반적으로 영어 (en-US) 문화를 좋아하지만 짧은 날짜 시간의 날짜 시간 패턴을 변경해야하는 경우 Global.asax에 추가 할 수 있습니다.

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    CultureInfo ci = new CultureInfo("en-US"); 
    ci.DateTimeFormat.SetAllDateTimePatterns(
     new string[] { "dd/MM/yyyy" }, 
     'd' 
    ); 
    System.Threading.Thread.CurrentThread.CurrentCulture = ci; 
    System.Threading.Thread.CurrentThread.CurrentUICulture = ci; 
} 

첫 번째 배열은 지원되는 날짜 형식이며 두 번째 문자는 바꿀 패턴입니다.

관련 문제