2010-06-18 8 views
2

.ascx 파일에 체크 박스가 있습니다. 이 .ascx 파일은 닫힌 소스 웹 응용 프로그램 내에 위치하고 있으며, 무언가가 checkchanged 이벤트가 격발하는 것을 방지합니다.checkchanged 체크 박스 asp.net에 대해 실행되지 않음

첫 번째로 checkchanged 이벤트가 발생하면 페이지를로드하고 확인란을 선택합니다 (확인). 두 번 클릭하면 (선택 취소) checkchanged 이벤트가 발생하지 않습니다. 다시 확인하면 이벤트가 시작되고 다시 선택을 취소하면 계속 실행되지 않습니다. 확인란의 기본값을 true로 설정하면로드 될 때 동일한 효과가 발생하지만 처음에는 선택을 취소하고 두 번째로 선택하면 실행되지 않습니다.

이 .ascx가 켜져있는 페이지는 EnableViewState가 .ascx뿐만 아니라 true로 설정되어 있으며 확인란 자체에서도 설정하려고했습니다. 이 확인란의 AutoPostBack도 true로 설정됩니다.

이 응용 프로그램에서 .ascx 파일을 가져 와서 테스트 웹 응용 프로그램 페이지에 넣으면 예상대로 작동합니다. 나는 또한 체크 박스가 업데이트 패널의 내부에 있다고 언급하지만, 업데이트 패널을 제거하면 여전히 동일한 불리한 영향을 미치기 때문에 관련되지 않는 것으로 보입니다.

이 응용 프로그램 내에서 checkchanged 이벤트가 격발하는 것을 방지 할 수있는 것은 무엇입니까?

+0

출력되는 특별한 자바 스크립트가 포스트 백을 막고 있습니까? – womp

+0

나는 그것이 두 번 확실하게 다시 게시된다는 것을 안다. 두 번째 클릭만으로는 checkchanged 이벤트를 발생시키지 않으며 매번 다른 이벤트를 실행합니다. – Brandon

+0

또한 OnLoad 이벤트 핸들러를 사용하여 포스트 백인지 확인하고 체크 박스가 선택되었는지 여부를 확인하려고했지만 항상 false라고 생각하는 경우를 생각해 보았습니다. 그럴거야? – Brandon

답변

2

흠, 다른 자바 스크립트 오류가 발생하지 않았습니까? 또한 업데이트 패널 안에 있다고 언급 한 이후에 트리거 추가를 시도 했습니까? 업데이트

<asp:UpdatePanel> 
    <ContentTemplate> 
     //Content 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="yourCheckBox" /> 
    </Triggers> 
</asp:UpdatePanel> 

: 마이크로 소프트 당 : 은 체크 박스 컨트롤은이 이벤트를 서버에 포스트 사이에 값을 유지해야한다 당신이 코드를 통해

CheckBox checkbox = yourFormOrContainer.FindControl(yourCheckBox.ID) as CheckBox; 
if(checkbox != null) 
{ 
    checkbox.AutoPostBack = true; 
} 

두 번째 업데이트를 AutoPostBack 속성을 강제로 시도 되세요 올바르게 작동합니다. 이 컨트롤에 대해 뷰 상태가 활성화되어 있는지 확인하십시오.

데이터베이스에 값을 유지하는 경우 페이지/업데이트 패널이 다시 게시 될 때 값을 다시 가져 오는 중입니까? 이전 값을 얻은 것으로 의심되어 여전히 체크되고 따라서 실행되지 않습니다. 원래 업데이트 패널 내부에있는 경우 Bind을 사용하여 해당 데이터 값 (아마도 비트 필드)을 설정하고 있습니까?

+0

체크 박스를 선택하지 않고 체크 표시를 해제하고 레이블을 "참 true"로 설정하거나 선택하지 않으면 "false"로 설정합니다. 나는 데이터베이스에 아무것도 저장하지 않거나 체크 박스의 값을 데이터베이스에서 가져 오지 않는다. 또한 업데이트 패널을 제거하더라도 문제가 발생합니다. – Brandon

+0

이 사용자 컨트롤을이 닫힌 소스 응용 프로그램 외부의 테스트 응용 프로그램 내에서 작동 시키면 모두 잘 작동합니다. 닫힌 소스 응용 프로그램이 어떻게 든 그것을 방해하고있다 ... 나는 생각한다 ... – Brandon

0

이것은 제가 추측합니다 : 어떤 이유로 든 이런 식으로 동작하는 확인란을 원한다면 클래스를 오버로드 한 다음 변경 사항을 추적하거나 토글하는 int (또는 상태 bool) 부울는 사실에만 최대 이벤트 거품시키는 /를 INT 2.

로 나누어이었다합니다 (http://odetocode.com/code/94.aspx 코드를 확인하고 온 클릭 방식의 문이 무슨 뜻인지 참조하는 경우를 상상해 보라.)에 관해서는

카운터/상태 변수를 유지합니다. Viewstate에 없으면 ControlState, Session 또는 응용 프로그램 캐시에 숨겨져있을 수 있습니다. (아직하지 않은 경우 모든 목록을 표시하려고 시도하십시오.)

다시 말하면 이것은 순진하지 않지만 "확인되지 않은"이벤트는 별도로 트리거 될 수 있습니다. 자신의 처리기? 나는 더 어리석은 물건을 보았다. .. 나는 생각한다.

0

similar problems이 (가) 있으니 확인해 볼 가치가 있습니다.

페이지 및 컨트롤 자체에서 EnableViewState 특성을 확인했음을 확인했습니다. 그러나 ViewState가 계단식으로 연결되어 있으므로 컨트롤 내에 컨트롤이 있고 부모 컨트롤에 EnableViewState가 false로 설정되어 있으면 ViewState를 사용할 수있는 경우에도 자식 컨트롤에 ViewState가 남아 있지 않습니다.

중첩 컨트롤이 있고 그 중 하나에서 ViewState가 비활성화되어있어 몇 시간 동안 나를 괴롭혔습니다.

0

현재 FubuMVC를 사용하여 애플리케이션을 천천히 다시 쓰는 중입니다. fubu와 webforms가 병렬로 실행되기 때문에 fubu를 사용하여이 작은 섹션을 다시 작성할 수있었습니다. 이제는이 문제에 대한 웹 양식을 망칠 더 이상 낭비하지 않으려 고합니다.

나는 대부분의 사람들이 알고 있지만, 이것은 선택 사항이 아니지만, 이것이 내가 어떻게 해결 했는가.

0

설정 AutoPostBack = "True"가 작동합니다

관련 문제