2009-12-07 7 views
9

URL을 통해 날짜를 전달하려면 어떻게해야합니까? 여기 Action을 MVC로 읽으려면 어떻게 URL을 통해 날짜를 전달합니까?

당신이 날짜를 볼만큼 내가 할 노력하고 무엇 당신은 인코딩에게 그것을 URL을하지만 같은 주위 날짜 시간을 통과 할 수

http://localhost/Controller/Action/id=0d5375aa-6d43-42f1-91f0-ea73d9beb361&date=02/12/2009 
+0

URL에 전달해야합니까? QueryString 또는 다른 Dict는 페이지 전체에서 사용할 수 있습니다. – Brad8118

답변

4

쿼리 문자열에서 특정 형식 (예 : yyyymmdd)을 사용하여 날짜를 전달한 다음 컨트롤러에서 올바르게 구문 분석 할 수 있습니다.

&date=02/12/2009 
change to 
&date=20091202 (yyyymmdd) 

이 새로운 형식을 사용하여 인스턴스화하거나 컨트롤러에 직접 구문 분석 된 DateTime 개체 래퍼를 만들 수 중 하나.

public MyWrapperDate(int date) 
{ 
    int year = date/10000; 
    int month = ((date - (10000 * year))/100); 
    int day = (date - (10000 * year) - (100 * month)); 

    this.DateTimeObject = new DateTime(year, month, day); 
} 
0

앞으로 URL에 유효하지 않은 슬래시를 사용 요청 문자열이 문화권 경계를 넘으면 구문 분석 오류가 발생할 수 있으므로 문자열은 항상 약간 까다 롭습니다.

더 나은 옵션은 DateTime을 Ticks로 변환하고 해당 번호를 전달하는 것입니다.

+0

ISO 형식 (yyyy-MM-dd) 사용은 어떻습니까? 그래도 틱으로 변환해야합니까? – maxspan

0

MVC는 URL을 생성하고 모델을 바인딩 할 때 현재 문화권을 사용합니다. 텍스트 상자가 있고 사용자가 거기에 날짜를 입력하는 경우와 같이 일부 시나리오에서는 의미가 있지만 종종 문제가 있습니다. 문화가 다른 경우 가치가 항상 불변 문화에 대한 형식으로되어 있으면 더 쉽습니다.

귀하의 경우에는 불변의 문화에 의해 렌더링 된 문자열로 값을 전달합니다. 그런 다음 CustomModelBinder를 사용하여 모델의 속성을 채 웁니다.

13

ISO 8601 표준은 명확하고 유효하지 않은 URL 문자를 포함하지 않으며 yyyy-MM-dd이며 DateTime.Parse/TryParse에서 잘 작동합니다.

또 다른 옵션은 원하는 형식을 사용하고 HttpServerUtility.UrlEncode/UrlDecode를 사용하여 URL을 간단히 인코딩하는 것입니다.

관련 문제