Pergunta

Eu tenho uma página do ASP.NET, que exibe uma lista de opções para o usuário. Quando eles selecionam na lista, ela faz uma postagem e consulta um servidor SQL. Os resultados são exibidos em uma ListView abaixo das opções em um painel de atualização. Abaixo está um trecho do itemTemplate:

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

O DataitemIndex não aparece, então meu CommandAgument está vazio. No entanto, o remetente do objeto é o botão, que mostra o item.

Por que o item de índice não está aparecendo no CommandAgument?

Poderia ser o post de volta? Se sim, por que seria o post de volta? Existe uma maneira de contornar isso?

EDIT: Desculpe, pelas minhas tentativas de resolvê -lo antes, publiquei código ruim, mas ainda não está aparecendo.

Resolução: Encontrei outro trabalho em que o remetente do OnCommand é o botão Link, que possui o CommandAgument. Vou atingir esse problema para ser um problema com vários postagens e JavaScript.

Foi útil?

Solução

Você não pode usar o <%= %> sintaxe Propriedades internas em uma tag com um runat="server" atributo. Estou surpreso que o código seja executado. :)

ATUALIZAR:

Você provavelmente deseja usar o evento ItemDatabound no repetidor, encontrar o linkbutton e definir a propriedade CommandArgument.

Não é muito elegante, mas aqui está uma amostra do 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

Outras dicas

Você não está configurando

Você pode querer

<%# Container.DataItemIndex %>

ou

<%= Container.DataItemIndex %>

:)

Tentar

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

Você estava perdendo o sinal "#".

Este site realmente me ajudou com esse problema: http://forums.asp.net/t/1671316.aspx

O problema que encontrei foi que estava sendo aprovado argumentos nulos no CommandAgument quando cliquei no botão pela segunda vez. Como o post acima explica, isso ocorre porque o CommandAgument está definido apenas no evento do banco de dados. Então, para corrigir isso, inclua um evento de banco de dados no 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

Verifique se o estado de exibição está ativado e.row.enableViewState = true;

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top