2009-09-05 26 views
6

Tengo una página ASP.Net, que muestra una lista de opciones para el usuario. Cuando seleccionan de la lista, devuelve una publicación y consulta un servidor sql. Los resultados se muestran en una vista de lista debajo de las opciones en un panel de actualización. A continuación se muestra un fragmento de la ItemTemplate:¿Por qué mi CommandArgument está vacío?

<asp:LinkButton Text="Save IT" OnCommand="SaveIt" CommandArgument="<%# Container.DataItemIndex %>" runat="server" /> 

El DataItemIndex no parece, por lo que mi CommandArgument está vacía. Sin embargo, el remitente del objeto es el botón, que muestra el elemento.

¿Por qué el ítem índice no aparece en CommandArgument?

¿Podría ser la publicación? Si es así, ¿por qué sería la publicación? ¿Hay alguna forma de evitarlo?

Edit: Lo siento, por mis intentos de resolverlo antes, publiqué un código incorrecto, pero todavía no aparece.

Resolución: Encontré otra alternativa en el sentido de que el remitente de OnCommand es el botón de enlace, que tiene CommandArgument. Voy a señalar que este problema será un problema con varias devoluciones de mensajes y javascript.

+0

casi con certeza la devolución de datos ... –

Respuesta

7

No se puede utilizar la sintaxis <%= %> dentro de las propiedades en una etiqueta con un atributo runat="server". Me sorprende que el código incluso se ejecute. :)

ACTUALIZACIÓN:

Es posible que desee utilizar el evento ItemDataBound en el repetidor, encontrar el LinkButton y establezca la propiedad CommandArgument.

No muy elegante, pero aquí hay una muestra de VB.NET.

Private Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound 
    Select Case e.Item.ItemType 
     Case ListItemType.Item, ListItemType.AlternatingItem 
     Dim b As LinkButton = e.Item.FindControl("btn") 
     b.CommandArgument = e.Item.ItemIndex 
    End Select 
    End Sub 
+0

Lo cambié a #, pero aún no lo mostrará en CommandArgument. No resuelve el problema original. – kevindaub

+0

Encontré otra solución, pero su solución debería funcionar también. – kevindaub

0

No se está configurando

Usted posiblemente desee

<%# Container.DataItemIndex %> 

o

<%= Container.DataItemIndex %> 

:)

0

Trate

<asp:LinkButton Text="Save IT" OnCommand="SaveIt" CommandArgument="<%# Container.DataItemIndex %>" runat="server" /> 

Falta el signo "#".

+0

Lo siento, he publicado un código incorrecto. Todavía no está apareciendo. – kevindaub

0

Este sitio realmente me ayudó con este problema: http://forums.asp.net/t/1671316.aspx

El problema que encontramos fue que estaba siendo pasada argumentos nulos en el CommandArgument cuando hice clic en el botón una segunda vez. Como se explica en la publicación anterior, esto se debe a que commandargument solo se establece en el evento databind. Por lo tanto, para solucionar esto, incluya un evento de enlace de datos en la página_carga sub

Ej. (VB)

Private Sub BindSelectButtons()  

    'Purpose: bind the data to the select buttons for commandargument to be used 
    Dim i As Integer 
    For i = 0 To gridview1.Rows.Count - 1 
     gridview1.Rows(i).Cells(8).FindControl("btnID").DataBind() 
    Next 
End Sub 

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 

    'Rebind select buttons so that the commandargument refreshes 
    BindSelectButtons() 
End Sub 
0

Asegúrese de que el estado de vista está habilitado e.Row.EnableViewState = true;

Cuestiones relacionadas