2009-09-05 82 views
6

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

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

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

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

难道是回帖吗?如果是这样,那么为什么会是回发?有没有办法解决它?

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

分辨率: 我发现另一个解决方法是OnCommand的发件人是链接按钮,它具有CommandArgument。我会将这个问题记录成多个回传和javascript的问题。

+0

几乎肯定是回发... – 2009-09-05 00:46:12

回答

7

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

UPDATE:

您可能需要使用中继器上ItemDataBound事件,发现的LinkBut​​ton并设置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 
    End Select 
    End Sub 
+0

我将它改为#,但它仍然不会显示在CommandArgument中。它不能解决原来的问题。 – kevindaub 2009-09-05 01:14:10

+0

我发现了另一个解决方法,但是您的解决方案也应该可以工作。 – kevindaub 2009-09-05 02:05:38

0

你不设置它

你可能想

<%# Container.DataItemIndex %> 

<%= Container.DataItemIndex %> 

:)

0

尝试

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

您错过了“#”号。

+0

对不起,我发布了不好的代码。它仍然没有出现。 – kevindaub 2009-09-05 00:53:10

0

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

我遇到的问题是,我是被传递空参数在commandargument当我在按钮上点击一次。正如上面的帖子所解释的那样,这是因为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 
0

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