Pregunta

Tengo una página ASP.Net, que muestra una lista de opciones al usuario. Cuando seleccionan de la lista, se hace una copia de correos y consulta un servidor SQL. Los resultados se muestran en una vista de lista a continuación las opciones en un panel de actualización. A continuación se muestra un fragmento de la ItemTemplate:

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

El DataItemIndex no aparece, por lo que mi CommandArgument está vacía. Sin embargo, el emisor objeto es el botón que muestra el artículo.

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

¿Podría ser el segundo palo? Si es así, ¿por qué sería el segundo palo? ¿Hay una manera de evitarlo?

Editar: Lo sentimos, de mis intentos de resolver antes, he publicado código malo, pero todavía no aparece.

Resolución: He encontrado otro trabajo en torno a que el remitente del bajo demanda es el botón de enlace, que tiene la CommandArgument. Me caleará este tema hasta ser un problema con las devoluciones de datos múltiples y JavaScript.

¿Fue útil?

Solución

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

ACTUALIZACIÓN:

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

No es muy elegante, pero aquí es 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
        b.DataBind()
    End Select
  End Sub

Otros consejos

No se está configurando

posiblemente desea

<%# Container.DataItemIndex %>

o

<%= Container.DataItemIndex %>

:)

Trate

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

faltaban el signo "#".

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

El problema que encontré fue que estaba siendo pasada argumentos nulos en el CommandArgument cuando hice clic en el botón una segunda vez. Como explica el post anterior, esto se debe a CommandArgument sólo se establece en caso databind. Por lo tanto, para solucionar este problema, incluya un evento databind en el Sub Page_Load

Ex. (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

Asegúrese de estado de vista está habilitada e.Row.EnableViewState = true;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top