2012-07-02 6 views
0

다음과 같은 문제점이 있습니다.ASP.NET ProcessPostData의 첫 번째 시도 안 함

우리는 우리의 프레임 워크에서 IsMustField라는 속성을 가진 몇 개의 webcontrol을 가지고 있습니다. 이 속성을 설정하면 CreateChildControls 메서드가 일부 CSS를 변경하고 JS Validator를 컨트롤에 추가합니다. 여태까지는 그런대로 잘됐다. 이제 slighlty 제네릭 컨트롤을 구현하려고합니다. 한 가지 경우에는 텍스트 필드가 필수 항목이지만 다른 항목에서는 사용할 수없는 항목이 있습니다. 필드가 필수 필드 인 경우 결정은 컨트롤의 OnLoad 메서드에서 수행됩니다.

처음 페이지를 열면 모든 것이 정상입니다. 저장을 누르고 페이지 다시 게시가 완료되면 페이지가로드됩니다. IsMustField 필드의 초기 값은 ascx의 값으로 설정됩니다 (이 경우 true). 그런 다음 처음으로 ProcessPostData를 호출합니다. 이것은 EnsureChildControls 메서드를 호출하고 따라서 컨트롤의 CreateChildControls 메서드를 호출합니다. CSS와 JS Validator가이 메서드에 연결되어 있으므로 컨트롤이 필수 필드 인 것처럼 추가됩니다. 이후에 제네릭 컨트롤의 OnLoad 메서드가 호출되고 IsMustField가 false로 설정됩니다. 그러나 이미 CreateChildControls 메서드를 호출 했으므로 더 이상 원하는 효과가 없습니다.

이제 내 질문에 : 어떻게 든 ProcessPostData 먼저 시도하고 두 번째 호출 할 수 있도록, 제네릭 컨트롤 IsMustField false로 설정 한 후 컨트롤을로드 할 수 있습니까? 아니면 다른 솔루션을 검색해야합니까? 이 Btw은 : 사람이 나에게

안부 도움이 될 수 있습니다 내가 구현이 아주 엉터리 알고 ...하지만 난 프레임 워크를 변경하지 않아야합니다, 그래서 다른 선택의 여지가 :

내가 당신을 희망이 없다, 는

을 crazy_crank
+0

ProcessPostData는 어떤 이벤트가 호출 되었습니까? – TheGeekYouNeed

+0

ProcessPostData는 이벤트 자체이지만 확실하지는 않습니다. 첫 시도는 Page_Load 바로 직전에 호출됩니다. 두 번째는 Page_Load 바로 뒤에 시도합니다. –

답변

0

라이프 사이클에서 IsMustField 값을 이전에 설정하거나 수명주기의 뒷부분에서 "추가 유효성 검사기"동작을 수행하는 것과 같은 두 가지 옵션이있는 것 같습니다. 다음은 몇 가지 예입니다.

페이지 수명주기 (예 : Page_Init())의 앞부분에서 "isMustField"를 설정하면 ProcessPostData보다 먼저 실행됩니다. 이 방법은 isMustField 결정 동작이 ViewState가로드되기 전에 발생하므로 사용자 입력에 종속되지 않는다고 가정합니다.

두 번째 옵션은 JS 유효성 검사기의 적용 여부를 결정하기 위해 수명주기가 끝날 때까지 대기하는 것입니다. CreateChildControls 대신 Page_PreRender로 해당 기능을 이동하면 페이지에서 IsMustField = true 컨트롤에 대한 결정을 내리기 전에 모든 이벤트뿐만 아니라 viewstate도 완전히 처리 할 수있는 기회가 생깁니다.

페이지 수명주기에 대한 자세한 내용은 this MSDN article을 참조하십시오. IMO, 강력한 ASP.NET 개발자가 될 수있는 최선의 방법입니다. :)

+0

내가 원하는 옵션을 마음에두고 있습니다. 필요한 컨트롤이 아직 그 순간에 초기화되지 않았습니다. 나는 그들이 FormView 엘리먼트에 위치한다는 것을 가정한다. 어쨌든 컨트롤을 검색하려면 null을받습니다. 옵션 2의 문제점은 페이지의 나머지 부분에 심각한 영향을 미칠 수 있으므로 현재 진행되는 방식을 변경하고 싶지 않다는 것입니다. –

관련 문제