2010-01-03 4 views
0

.aspx가 있고 .ascx가 있습니다. .ascx에는 서버 컨트롤이 있습니다.페이지 새로 고침 및 바인드가 작동하지 않습니다.

에서 .aspx은 의 .ascx이

를 원하는 경우 고객이 카트에 추가 할 수있는 (사용자 지정 서버 컨트롤에서 공급) 일부 교차 판매 항목의 목록이 카트에있는 항목의 목록이 있습니다 장바구니에있는 항목 목록과 교차 판매 항목 목록은 리피터에 의해 구동되고 페이지로드에 바인딩됩니다. 따라서 .aspx는 페이지로드시 장바구니 항목을 다시 바인딩하는 메서드를 호출합니다. 그리고 .ascx는 페이지로드에서 내 .ascx에있는 사용자 정의 컨트롤 (.cs)의 교차 판매 품목을 리 바인드하는 메소드를 호출합니다.

문제는 사용자가 내 사용자 지정 컨트롤 내의 리피터에서 "장바구니에 추가"단추를 클릭하면 페이지가 새로 고쳐지고 일어날 일은 .aspx의 장바구니 항목과 교차 판매 목록입니다. 십자가 판매 품목이 카트로 옮겨 졌음을 보여주는 refrsh해야합니다. 그러나 디버깅 할 때 목록 이동이 이동 한 후 해당 항목으로 리바운드되는 것을 볼 수는 있지만 페이지는 여전히 이전 상태를 표시합니다. 페이지를 수동으로 새로 고쳐 다시 작동시켜야합니다.

Page.IsPostback을 확인해야 할 것으로 생각됩니다. 그러나 비록 내가 체크하지 않는다해도. 적어도 두리스트는 내 페이지로드에 관계없이 상쾌하게해야한다. 따라서 포스트 백이 되더라도 목록에서 새 상태를 표시해야하는지 확인하지는 않습니다. 어쨌든 포스트 백을 확인하지 않기 때문입니다. 그래서 postaback에 대한 점검은 여기에 문제가 있다고 생각하지 않습니다. 왜냐하면 목록을 리바 인드하고 모든 페이지로드시 다시 업데이트하기를 원하기 때문입니다 ... 초기 또는 포스트 백이면 ... 중요하지 않습니다. 매번 다시로드하십시오. 그러나 내가 올바른 수를 가진 목록의 리비전을 분명히 보았음에도 불구하고 (사용자가 버튼을 클릭 한 후 추가 된대로 십자가에 한 개, 카트에 한 개가 더 적음) 명확하게 볼 수는 있습니다.

그래서 다시 요약 해주십시오. 다음은 이벤트의 순서는 다음과 같습니다

  1. 사용자는 사용자들이 (이 목록은 Cart.aspx에 바인딩 모든 반등되어 이미 쇼핑 카트에 추가 카트 항목의 목록을 볼 수
  2. 자신의 카트 페이지에 페이지로드)
  3. 사용자는 페이지의 어딘가에 장바구니에 추가 할 수있는 교차 판매 품목 목록을 볼 수 있습니다. 이 목록은 내 .ascx에있는 사용자 지정 컨트롤이며 .ascx는 분명히 내 .aspx에 있습니다. 사용자 정의 컨트롤은 교차 판매 품목을 나열하는 중계기 일뿐입니다.
  4. 교차 판매 중 하나에서 "장바구니에 추가"버튼 중 하나를 클릭하십시오.
  5. 페이지 새로 고침. .aspx 및 .ascx의 페이지로드에서 DB로 이동하여 새 상태를 기반으로 두 목록을 다시 바인딩합니다. 즉, 항목이 카트에 추가 된 후 새 목록 이제는 장바구니 항목에 목록에 추가 된 항목이 하나 더 있어야합니다 ... 새로운 목록에 하나가 더 있음을 분명히 알 수 있습니다.
  6. 새로 고침 후에 페이지가 다시 나타나지만 새 상태를 반영하는 목록이 표시되지 않습니다 ... 장바구니 항목 목록에 새 항목이 표시되지 않고 추가 판매가 교차 판매 목록에서도 삭제되었습니다. 다시 한 번 디버깅 할 때 두리스트 모두 새로운 상태를 반영하는 올바른 레코드 집합을 보여주고 있습니다.

그래서이 업데이트 결과가 표시되지 않는 이유는 여기에서 알 수 없습니다.

답변

1

문제는 "장바구니에 추가"버튼에 대한 이벤트 핸들러가 page_load 다음에 호출된다는 것입니다. 그것은 오래된 항목들이 묶여 있음을 의미합니다.

해결책은 수동으로 a.이벤트 핸들러의 DataBind().

그럼에도 불구하고, 나는 여러 바인드를 피하기 위해를 Page_Load에

if(!Page.IsPostBack) 
{ 
    // bind cart 
} 

요지로 추천 할 것입니다.

+0

장바구니에 추가 버튼은 실제로는 하이퍼 링크 (비 asp.net)입니다. 클릭하면 쿼리 문자열의 값과 해당 값에 대한 리디렉션 검사를 처리하는 페이지 및 항목을 장바구니 항목으로 이동하는 데 필요한 기능을 수행하는 페이지로 리디렉션됩니다. – PositiveGuy

+0

Page_Load 인 경우! Page.IsPostBack을 사용하면 내 재 바인딩 호출을 막을 수 있습니까? – PositiveGuy

+0

문제는 다시 바인딩 결과가 페이지로드, 포스트 백, 아무 때 나 표시되도록하려는 것입니다. 포스트 백 이후인지 여부에 상관없이 페이지로드 기간 중 언제든지로드! – PositiveGuy

0

내 장바구니에 추가 버튼은 하이퍼 링크 일 뿐이며 사용자 정의 컨트롤은 쿼리 문자열에있는 플래그를 검사하여 항목을 이동하는 메소드를 실행합니다 (이동할 쿼리 문자열에서도 item #을 가져옵니다) , 난 그냥 리디렉션 (Response.Redirect (Request.Path);) 장바구니에 부모 .aspx 페이지로 이동 후 않았다. 이렇게하면 cart.aspx와 myusercontrol.ascx의 페이지로드가 발생하고 그리드가 리 바인드됩니다.