2010-07-14 3 views
2

나는 그것의 긴 뻗기를 알고있다. .. 단지 시험해보아야했다.가치가있는 속성을 알 수있는 방법이 있습니까?

예를 들어 SelectedDate 속성으로 DateTime 컨트롤을 만든 경우 서버 쪽 코드에서 Person.DateOfBirth로 설정하면 DateTime 컨트롤에서 SelectedDate가 Person에서 온 것을 알 수있는 방법이 있습니다. DateOfBirth?

+2

왜이 기능을 원하십니까? – jfs

+0

나는 datetime 컨트롤에서 백엔드로 가기 전에 날짜가 UTC로 변환되는 국제화 시스템을 다루고있다. 최근에 일부 날짜가 ... 불변 일 필요가있는 경우가 증가하고 있습니다. 예를 들어, 사람의 생년월일을 입력하면 6 월 15 일을 입력하면 DateTime에 00:00:00이라는 시간 구성 요소가 저장되어 UTC (-10)로 변환되면 14/06 14:00:00 그래서 다른 시간대에있는 사람이 그것을 본다면 다른 날짜로 바뀔 수 있습니다. –

+0

내가 한 일은 사용자 지정 특성 "고정"을 사용하여이 날짜를 설정하고 현재이 컨트롤을 읽어서 날짜/시간 변환을 중지하는 방법을 찾는 것입니다. 지금은 서버 측 코드에서 수동으로 다시 변환되지만 유지 관리의 악몽으로 바뀌는 것을 볼 수 있습니다. –

답변

0

일반적으로 없습니다.

속성을 설정할 때 호출 스택을 검사하는 것이 가능해야하지만, 이는 매우 형편이 좋지 않으며 근본적인 문제를 나타낼 수 있습니다. 나는 당신이 다른 방식으로 당신의 문제를 해결하려고 노력한다고 말합니다. 어떤 결과를 찾고 계십니까? 뭐하고 싶어?

+0

질문의 설명에서 시나리오를 설명했습니다. 그리고 나는 스택을 호출하지 않을 것입니다 :) –

0

일반적으로 이렇게하고 싶다면 실키에 동의해야합니다.

그러나 특정 클래스 또는이 경우 컨트롤에 대해 수행하려는 경우 사용자가 원하는 컨트롤을 상속 받아 자신의 컨트롤을 만든 다음 해당 속성을 재정의하고 해당 설정을 수정할 수 있습니다. 추가 정보를 저장하십시오.

하지만 난 당신이 일반적으로이 작업을 수행 할 수 같은데요 ....

+0

커스텀 컨트롤의 속성을 오버라이드하는 것을 정확히했습니다.하지만 setter의 값은 setter의 시간에 따라 어떤 객체인지 알려주지 않습니다. 그것의 단지 DateTime. –

0

이 작동하는지 모르겠지만, 그냥 생각하지 않습니다.

선택한 날짜 값 집합과 가져 오기에 Func <> 대리인을 통해 액세스하면 대상이 무엇이든 매개 변수를 설정합니다. Func <> 개체에서 메서드 및 대상을 요청할 수 있어야합니다. 나는 나 자신을 시험해 보지 않았다. 시도해 본다면 이것에 대한 생각을 듣는 것이 대단 할 것이다.

그냥 가능한 예제이에 추가 :

Func<DateTime> _selectedDate = person.GetDateOfBirth(); 

그래서 나중에는

명확 할 려
if (_selectedDate.Target.GetType() == typeof(Person)) 
    doSomething() 
+0

그게 선택한 날짜 개체 유형을 변경하거나 새 속성을 컨트롤에 추가하는 것 같습니다. 그렇지만 고마워요! 나는 이것을 시도 할 것이다. –

1

로 소스를 요청할 수에 Separation of Concerns Principle을 위반하는 것입니다. DateTime 컨트롤의 작업은 날짜 시간을 표시하고 사용자가 날짜 시간을 변경할 수있게합니다. 그것은 DateTime이 어디에서 왔는지에 대해 알지 못합니다.

솔직히 나는이 기능이 필요한 이유에 대해 생각하기 위해 투쟁합니다. 양식은 상당히 잘 이해 된 UI 패러다임입니다. 양식을로드하고 모델에서 양식 요소의 값을 설정하고 사용자가 값을 변경하고 모든 값을 다시 읽고 유효성을 확인하고 모델을 업데이트 할 수 있습니다. 가능한 다른 방법은 무엇입니까?

EDIT이 특정 문제에 대해서는 datetime 컨트롤에 플래그를 만들면됩니다 (예 : ConvertToUTC). true로 설정하면 시간이 UTC로 변환되고, 그렇지 않으면 사용자가 입력 한 값이 그대로 유지됩니다. 멋지고 깨끗해야합니다.

+0

사실입니다 ... 현재 프레임 워크를 변경하고 싶지 않기 때문에 잘못된 길을 벗어난 것일 수도 있습니다. –

+0

@neo : 이와 같은 유형간에 무시 무시한 커플 링을 만드는 것보다 기존 프레임 워크를 변경하는 것이 좋습니다. 호출자를 확인하고 아키텍처의 종속적 인 부분을 만들면 유지 관리 문제가 복잡해지며 완화되지 않습니다. '관심사의 분리'는 은혜의 은혜이며 ** 관심사의 분리를 유지하기 위해 현재의 프레임 워크 **를 고칠 수 있다면 유지 관리 시나리오를 개선 할 것입니다. – jrista

+0

그래, 그게 현재 해결책이 무엇인지, 컨트롤의 "StickyDate"bool 속성 –

0

나는 클라이언트 측 setter를 얻을 필요가 있다고 생각한다. setter에 "rel"속성을 설정하고 클라이언트 측 (예 : jQuery)의 "rel"속성을 가져올 수 있습니다.

// server-side.  
DateTimeControl.Attributes["rel"] = "Person.DateOfBirth"; 

// client-side (jQuery). 
if $('#DateTimeControl').attr('rel') == 'Person.DateOfBirth' { 
    // logic here. 
} 

내가 정교하게 - 감사해야하는지 알려주세요.

관련 문제