2011-01-31 5 views
5

내 상황과 관련된 많은 질문을 읽었지만 그 중 하나를 찾지 못했습니다. 현재 리피터에 4 개의 바인딩 된 항목이 있습니다. 리피터의 버튼을 클릭하면 내 오류가 발생합니다. 아래에 마크 업과 코드 숨김이 있습니다. 누군가가 왜 이런 일이 일어나고 그것을 해결할 수 있는지 설명 할 수 있습니까? (필자는 페이지 decleration를 제외하고 단지 Page_Load 이벤트를 포함했다. 내가 잘라 과거 전체 코드해야하는지 알려주세요)잘못된 다시 게시 또는 콜백 인수가 발생하는 중계기 제어

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <asp:Repeater ID="rptFoo" runat="server"> 
     <ItemTemplate> 
     <asp:Button ID="btnfoo" runat="server" /> 
     </ItemTemplate> 
    </asp:Repeater> 
    </div> 
    </form> 
</body> 
</html> 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
Dim items As New List(Of String) 
items.Add("test1") 
items.Add("test2") 
items.Add("test3") 
items.Add("test4") 
rptFoo.DataSource = items 
rptFoo.DataBind() 
End Sub 
+2

[데이터 바인딩 된 컨트롤의 잘못된 포스트 백 또는 콜백 인수] (http://stackoverflow.com/questions/293699/invalid-postback-or-callback-argument-with-databound-controls)의 가능한 복제본 – AakashM

답변

0
을 필요로 넣다 내 질문에 대한 대답

여기에 답을 되풀이하여 대답 할 필요가 없습니다.

문제는 페이지로드 이벤트에서 컨트롤의 데이터를로드하고 DataBind() 메서드를 호출하는 것입니다. 그러나 이벤트가 발생하기 전에 DataBind() 메서드를 호출하면 컨트롤 명명이 변경되면서 위의 예외가 생성되는 것으로 나타납니다.

해결 방법은 if ​​(! IsPostback) DataBind()로 변경 한 다음 이벤트 처리기의 끝에서 DataBind() 메서드를 호출하는 것입니다. 변경 내용에 영향을 미치려면 처리기 끝에서 대부분의 시간 호출해야합니다.

이것이 문제가 아니며 JavaScript를 사용하여 클라이언트 측 제어를 수정하는 경우 this article을 확인하십시오.

3

item 명령 작업을 수행 할 때 Repeater이 데이터 원본 (바인딩)을 가져 오기 때문에 이런 현상이 발생합니다. page_load 메소드에 if(not ispostback)을 추가하기 만하면됩니다.

관련 문제