【问题标题】:Why is my CommandArgument Empty?为什么我的 CommandArgument 为空?
【发布时间】:2010-11-25 19:24:12
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 几乎可以肯定是回发...

标签: asp.net listview commandargument


【解决方案1】:

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

更新:

您可能希望在中继器上使用 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

【讨论】:

  • 我把它改成了#,但它仍然不会在CommandArgument中显示。它并没有解决原来的问题。
  • 我找到了另一种解决方法,但您的解决方案也应该有效。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    我遇到的问题是,当我第二次单击该按钮时,我在命令参数中传递了空参数。正如上面的帖子所解释的,这是因为 commandargument 仅在 databind 事件中设置。因此,要解决此问题,请在 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】:

      试试

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

      你错过了“#”号。

      【讨论】:

        【解决方案5】:

        你没有设置它

        你可能想要

        <%# Container.DataItemIndex %>
        

        <%= Container.DataItemIndex %>
        

        :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-04
          • 2018-06-26
          • 2018-04-07
          • 2015-02-22
          • 2017-12-07
          • 2010-12-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多