2011-01-31 31 views
5

He leído muchas de las preguntas relacionadas con mi situación, pero no he encontrado ninguna que lo haga. Actualmente tengo un repetidor con 4 elementos vinculados, al hacer clic en un botón en el repetidor causa mi error, a continuación se muestra el marcado y el código subyacente. ¿Puede alguien explicarme por qué sucede esto y cuál es la solución? (He excluido el decleration página y solo se incluye el evento Load. Hágamelo saber si debo cortar y código completo pasado)control del repetidor que causa devolución de datos inválida o argumento de devolución de llamada

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

posible duplicado de ["devolución de datos inválida o argumento de devolución de llamada" con controles de enlace de datos] (http://stackoverflow.com/questions/293699/invalid-postback-or-callback-argument-with-databound-controls) – AakashM

Respuesta

0

Voy a repetir la respuesta aquí, por lo que no necesita vincular a

El problema es cargar los datos para el control en la página Cargar evento y llamar al método DataBind(). Sin embargo, parece que si se llama al método DataBind() antes de que se generen los eventos, la excepción anterior se genera cuando la denominación de control ha cambiado.

La solución es cambiar esto a if (! IsPostback) DataBind() y luego llamar al método DataBind() al final del controlador de eventos. Debería llamarlo la mayor parte del tiempo al final del controlador para afectar los cambios.

Si este no es su problema, y ​​está modificando los controles del lado del cliente mediante JavaScript, consulte this article.

3

Esto ocurre porque el Repeater está obteniendo el origen de datos (vinculante) mientras realiza la operación del comando item. Simplemente agregue if(not ispostback) al método page_load.

Cuestiones relacionadas