我有一个ASP.Net页面,它向用户显示一个选项列表。当他们从列表中选择时,它会回发并查询sql server。结果显示在更新面板中选项下方的列表视图中。下面是ItemTemplate的片段:
<asp:LinkButton Text="Save IT" OnCommand="SaveIt" CommandArgument="<%# Container.DataItemIndex %>" runat="server" />
DataItemIndex没有出现,所以我的commandargument是空的。但是,对象发件人是显示项目的按钮。
为什么索引项目没有出现在CommandArgument中?
这可能是回帖吗?如果是这样,为什么会回帖?有办法吗?
编辑: 对不起,我之前试图解决它,我发布了错误的代码,但它仍然没有出现。
分辨率: 我找到了另一种解决方法,即OnCommand的发送者是链接按钮,它具有CommandArgument。我将粉笔这个问题作为多个回发和javascript的问题。
答案 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;