Warum ist mein Command leer?
-
21-09-2019 - |
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.
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;