Frage

Ich habe eine ASP.Net Seite, die eine Liste von Optionen für den Benutzer anzeigt. Wenn sie aus der Liste auswählen, hat es eine Post zurück und fragt einen SQL-Server. Die Ergebnisse werden in einer Listenansicht unterhalb der Optionen in einem Update-Panel angezeigt. Im Folgenden ist ein Ausschnitt aus dem ItemTemplate:

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

Die DataItemIndex nicht angezeigt wird, so meine Command leer. Allerdings ist das Objekt Sender die Taste, die das Element zeigt.

Warum ist der Index Element nicht in der Command erscheinen?

Könnte es die Post zurück? Wenn ja, warum wäre es die Post zurück? Gibt es eine Möglichkeit, um es?

Edit: Es tut uns Leid, von meinen Versuchen, es vor zu lösen, ich gepostet schlechten Code, aber es ist immer noch nicht erscheinen.

Auflösung: Ich fand eine andere Arbeit um, dass der Absender des OnCommand ist die Link-Taste, die das Commandargument hat. Ich werde dieses Problem ankreiden ein Problem zu sein mit mehreren Postbacks und Javascript.

War es hilfreich?

Lösung

Sie können nicht die <%= %> Syntax innerhalb Eigenschaften auf einen Tag mit einem runat="server" Attribute verwenden. Ich bin der Code überrascht sogar laufen. :)

UPDATE:

Sie wollen wahrscheinlich das ItemDataBound Ereignis auf dem Repeater verwenden, die Linkbutton finden und die Command Eigenschaft.

Nicht sehr elegant, aber hier ist ein VB.NET-Beispiel.

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

Andere Tipps

Sie sind es nicht Einstellung

Sie möglicherweise wollen

<%# Container.DataItemIndex %>

oder

<%= Container.DataItemIndex %>

:)

Versuchen

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

Sie haben das Zeichen "#" fehlen.

Diese Seite hat mir wirklich geholfen, mit diesem Problem: http://forums.asp.net/t /1671316.aspx

Die Frage war ich lief in, dass ich null Argumente in dem Commandargument übergeben wird, wenn ich auf der Taste ein zweites Mal angeklickt. Wie der Beitrag oben erklärt, ist dies, weil Command nur im databind Ereignisse gesetzt wird. Also, um dieses Problem beheben, gehört ein databind Ereignis in der page_load Unter

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

Stellen Sie sicher, View State aktiviert e.Row.EnableViewState = true;

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top