2013-07-22 4 views
0

ViewState를 비활성화해도 텍스트 상자가 새로 고침/다시 게시에서 값을 유지하지 못하게하는 방법에 대한 많은 정보가 있습니다. 내가 할 수없는 것은이 행동을 우회하는 방법에 대한 정보입니다.ASP.NET 컨트롤에서 데이터를 다시로드하도록 강요하십시오.

여기 내가 이것을해야하는 이유입니다. AJAX를 통해 DB를 업데이트하는 양식이 있습니다. 사용자가 필드를 변경할 때마다 db가 즉시 업데이트됩니다. 이 때문에 데이터베이스가 아닌 다른 곳에 값을 저장할 이유가 없습니다.

다음 시나리오를 고려하십시오.

  1. 사용자가 페이지를로드 할 때 텍스트 상자 이름의 값이 "Bob"입니다.
  2. 사용자가 이름을 "Dave"로 변경합니다. (데이터베이스 업데이트)
  3. 사용자가 새로 고침 단추를 클릭합니다.

이름 입력란에 "Dave"값이 표시되지만 대신 "Bob"이 표시됩니다. 그래서 ASP에서 db의 값을로드하도록하는 방법은 무엇입니까?

+0

값은 제출/다시 게시 정보 후에 만 ​​변경됩니다. AJAX 호출을 사용하여 새로 고치지 않고도이 작업을 수행 할 수 있습니다. – PiLHA

답변

1

사용자가 새로 고침 버튼을 클릭합니다.

이 단계에서는 데이터베이스에서 데이터를 다시 읽고 해당 데이터로 컨트롤을 강제로 채 웁니다. 페이지의 모든 "이벤트"가 실제로 AJAX 요청에 의해 처리되는 경우 "새로 고침"버튼에 대한 Page_LoadClick 핸들러와 같은 의미있는 두 가지 "WebForms 이벤트"처럼 들립니다. 이 두 이벤트 중 하나는 데이터베이스에서 컨트롤을 다시 채워야합니다.

(또는에는 "새로 고침"버튼을 사용자가 단지 Page_Load 그냥 항상이 시나리오에서는 데이터베이스에서 컨트롤을 채우는해야하는 경우에는 브라우저 기능을 통해 페이지를? 다시로드가 없다.)

+0

아 하. 문제는 Page_Load가 아니라 Page_Init에 채워지는 것이 었습니다. 감사! – christok

+0

이것에 대한 업데이트. 그것은 "정상적인"컨트롤을 위해 잘 작동하는 것 같지만 동적으로 만들어진 컨트롤은 아닙니다. 코드 값에서 동적 컨트롤에 올바른 값이 설정되어 있는지 확인할 수는 있지만 어딘가에 오버라이드 된 것으로 보입니다. 이견있는 사람? – christok

+0

@christok : 오버라이드되는 부분은 어디입니까? WebForms 페이지 수명주기 전반에 걸쳐 페이지 컨트롤에 많은 일이 발생합니다. 잠재적으로 새로운 질문을하기에 충분할 수 있지만 관찰 된 행동을 재현하기 위해 기존 질문을 코드로 업데이트하는 것이 최소한의 장점입니다. – David

1

그것은이 보인다 내가 닥친 문제는 올바른 페이지 이벤트 중에 컨트롤을 만들고 채우는 것과 관련이있었습니다. Page_Init에 컨트롤을 만들고 Page_Load에 입력하여이 문제를 해결했습니다.

+0

이 순서의 이벤트는 WebForms 페이지 수명주기 동안 엔진이 내부적으로 수행하는 것과 매우 비슷하게 들립니다. http://msdn.microsoft.com/en-us/library/ms178472.aspx 기본적으로 Init 단계는 컨트롤이있는 곳입니다 생성되고로드 스테이지에서는 해당 속성을 설정할 수 있습니다. – David