为什么我的CommandArgument为空?

时间:2009-09-05 00:44:51

标签: asp.net listview commandargument

我有一个ASP.Net页面,它向用户显示一个选项列表。当他们从列表中选择时,它会回发并查询sql server。结果显示在更新面板中选项下方的列表视图中。下面是ItemTemplate的片段:

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

DataItemIndex没有出现,所以我的commandargument是空的。但是,对象发件人是显示项目的按钮。

为什么索引项目没有出现在CommandArgument中?

这可能是回帖吗?如果是这样,为什么会回帖?有办法吗?

编辑: 对不起,我之前试图解决它,我发布了错误的代码,但它仍然没有出现。

分辨率: 我找到了另一种解决方法,即OnCommand的发送者是链接按钮,它具有CommandArgument。我将粉笔这个问题作为多个回发和javascript的问题。

5 个答案:

答案 0 :(得分:8)

您不能在具有<%= %>属性的代码的属性内使用runat="server"语法。我很惊讶代码甚至会运行。 :)

<强>更新

您可能希望在转发器上使用ItemDataBound事件,找到linkbutton并设置CommandArgument属性。

不是很优雅,但这是一个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

答案 1 :(得分:0)

你没有设置它

你可能想要

<%# Container.DataItemIndex %>

<%= Container.DataItemIndex %>

:)

答案 2 :(得分:0)

尝试

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

你错过了“#”标志。

答案 3 :(得分:0)

这个网站真的帮助我解决了这个问题:http://forums.asp.net/t/1671316.aspx

我遇到的问题是当我第二次点击按钮时,我在命令参数中传递了null参数。正如上面的帖子所解释的那样,这是因为commandargument仅在数据绑定事件中设置。因此,要解决此问题,请在page_load子

中包含数据绑定事件

实施例。 (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

答案 4 :(得分:0)

确保已启用“查看状态” e.Row.EnableViewState = true;