6

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

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

DataItemIndex 没有出现,所以我的命令参数是空的。但是,对象发送者是显示项目的按钮。

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

会不会是回帖?如果是这样,为什么会是回帖?有办法解决吗?

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

解决方案:我发现了另一种解决方法,即 OnCommand 的发送者是链接按钮,它具有 CommandArgument。我会将这个问题归结为多个回发和 javascript 的问题。

4

5 回答 5

8

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

更新:

您可能希望在中继器上使用 ItemDataBound 事件,找到链接按钮并设置 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
于 2009-09-05T01:07:21.800 回答
0

你没有设置它

你可能想要

<%# Container.DataItemIndex %>

或者

<%= Container.DataItemIndex %>

:)

于 2009-09-05T00:48:57.030 回答
0

尝试

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

你错过了“#”号。

于 2009-09-05T00:49:40.340 回答
0

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

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

前任。(五)

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
于 2013-11-30T05:40:43.607 回答
0

确保启用视图状态 e.Row.EnableViewState = true;

于 2017-05-16T18:06:26.420 回答