2011-02-01 3 views
1

리피터 및 일부 필드가있는 업데이트 패널이 있습니다. 사용자가 필드의 세부 정보를 채울 때 Viewstate에 보관 된 콜렉션을 채 웁니다. 그런 다음 Viewstate는 리피터에 바인딩됩니다.리피터 및 편집 가능 필드가있는 UpdatePanel

그러면 updatepanel이 업데이트되고 repeater에 사용자가 방금 양식에 기입 한 값이 새 항목으로 포함됩니다.

또한 리피터의 일부로 편집 버튼이 있는데, 클릭하면 사용자가 처음 입력 한 데이터로 양식 필드가 채워집니다.

내가하고 싶은 것은 사용자가이 데이터를 편집하고 항목을 '저장할'수 있지만 컬렉션/뷰 상태에 추가하는 대신 사용자가 선택한 항목을 편집하고 콜렉션/viewstate를 반영합니다.

예를 들어, 두 개의 필드로 양식을 상상 :

이름 : 나이 : 나는 밥과 46을 입력하고 저장 히트

.

리피터에 Bob 46 옆에 '편집'버튼이있는 항목이 표시됩니다. 사용자가 편집 버튼을 클릭하면 폼 필드에 Bob과 46이 다시 채워집니다.

사용자는 Bob Age 47로 변경하고 저장합니다. 이제는 두 개의 항목 (Bob 46 및 Bob 47) 대신 Bob 47이 Bob 47으로 업데이트됩니다.

희망 사항은 분명합니다. 그것. 기억해야 할 중요한 사항은 Viewstate를 사용하여 중계기를 채우는 컬렉션을 포함하기 때문에 업데이트 패널에서이 모든 일이 발생한다는 것입니다.

답변

0

귀하의 질문에 ASP.NET의 UpdatePanel 작동 방법에 대한 약간의 혼란이 있음을 나타냅니다.

UpdatePanel을 업데이트하기 위해 "부분적인"포스트 백을 수행 할 때마다 페이지는 실제로 UpdatePanel과의 관련성에 관계없이 페이지 수명주기의 모든 부분을 거치며 실행됩니다. 그런 다음 UpdatePanel이 페이지에서 새로 고침됩니다. 이 동작은 페이지의 모양을보다 빨리 처리 할 수있게 해 주며 클라이언트 측에서 렌더링 시간을 절약 할 수 있다고 생각하지만, 실제로 UpdatePanel을 새로 고칠 때마다 전체 포스트 백이 수행됩니다.

리피터를 보관하기 위해 UpdatePanel을 사용하려는 경우, 데이터를 보관하기 위해 특별히 특별한 조치를 취할 이유가 없습니다. 추가, 편집 등 일반적인 리피터 메서드 만 사용하면됩니다. 여기에없는 다른 요구 사항이 없으면 ASP.NET 컨트롤이 이미 수행 한 것보다 ViewState에 데이터를 저장할 특별한 이유가 없습니다. 당신은 UpdatePanel의 업데이트를 트리거하고자하는 것은 무엇이든하도록 보장해야하지만, 당신은 그 것에 대해 혼란을 나타내지 않는다.

+0

잘 모르겠습니다. 위에서 설명한 시나리오를 가정하면 사용자가 양식을 채우고 조회수를 저장하면 리피터가 데이터 바인딩됩니다 ... viewstate/다른 데이터 소스가 사용되지 않으면 정확히 무엇이 발생합니까? 나는 틀림없이 그것을 설명했을 것입니다. 그러나 만약 여러분이 폼이 어떤 하나의 앉아있는 곳에서 여러 번 채워질 것이라고 상상한다면, 예를 들어 Bob 46, John 23, Mary 55 등등이 모든 것들이 중계기의 데이터 소스에 추가 될 것입니다. viewstate/session이 사용되지 않는다면 (그리고 나는 아직 DB에 커밋하고 싶지 않다) 어떻게 할까? – scaryjones

+0

@scaryjones UpdatePanel 때문에 ViewState를 _specifically_ 사용할 필요가 없다는 것을 의미하지만, 그렇지 않은 경우에는 필요에 따라 확실히 할 수 있습니다.Repeater 컨트롤을 사용하려는 경우 서버 측에서 ItemCommand 이벤트를 처리하여 버튼 클릭에 대한 모든 로직을 처리합니다. 이 핸들러에서 DB 백엔드가 아닌 콜렉션을 업데이트 할 수 있습니다. 즉, 당신은 ListView 또는 GridView 대신 Repeater를 사용하여 생각해 봤어? 논리가 좀 더 직관적 일 수 있습니다. – Andrew

관련 문제