2011-01-31 31 views
5

Tôi đã đọc qua nhiều câu hỏi liên quan đến tình huống của tôi nhưng tôi chưa tìm thấy câu hỏi nào. Tôi hiện đang có một repeater với 4 mục ràng buộc với nó, nhấp vào một nút trong repeater gây ra lỗi của tôi, dưới đây là đánh dấu và codebehind. Ai đó có thể giải thích cho tôi tại sao điều này xảy ra và sửa chữa nó? (Tôi đã loại trừ các decleration trang và chỉ bao gồm các sự kiện Page_Load. Cho tôi biết nếu tôi nên cắt và mã đầy đủ quá khứ trong)kiểm soát lặp lại gây ra postback không hợp lệ hoặc đối số gọi lại

<!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

bản sao có thể có của ["Không hợp lệ postback hoặc đối số gọi lại" với điều khiển Databound] (http://stackoverflow.com/questions/293699/invalid-postback-or-callback-argument-with-databound-controls) – AakashM

Trả lời

0

Tôi sẽ lặp lại câu trả lời ở đây để bạn không cần phải liên kết đến

Sự cố đang tải dữ liệu cho điều khiển trong trang Sự kiện tải và gọi phương thức DataBind(). Tuy nhiên có vẻ như nếu phương thức DataBind() được gọi trước khi các sự kiện được nêu lên, ngoại lệ trên được tạo ra khi việc đặt tên điều khiển đã thay đổi.

Giải pháp là thay đổi điều này thành if (! IsPostback) DataBind() và sau đó gọi phương thức DataBind() ở cuối trình xử lý sự kiện. Bạn sẽ cần phải gọi nó hầu hết thời gian anyway ở phần cuối của xử lý để ảnh hưởng đến những thay đổi.

Nếu đây không phải là vấn đề của bạn và bạn đang sửa đổi kiểm soát phía máy khách bằng JavaScript, hãy kiểm tra this article.

3

Điều đó xảy ra vì Repeater đang nhận nguồn dữ liệu (ràng buộc) khi bạn thực hiện thao tác lệnh item. Chỉ cần thêm if(not ispostback) vào phương thức page_load.

Các vấn đề liên quan