我有这样的代码
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DataList ID="DataList1" runat="server" OnItemCommand="DataList1_ItemCommand">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="Command1">
<img src="../images/image1.png" alt="" />
</asp:LinkButton>
</ItemTemplate>
</asp:DataList>
</ContentTemplate>
</asp:UpdatePanel>
和这个代码
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "Command1")
{
// Never drops here
}
}
事件正在触发。
但是当我调试时,LinkButton1的CommandName在源代码中不可见。
因此,if语句不起作用。
有什么想法吗?
编辑:我意识到我有另一个错误,我的页面属于这种情况。
然后我使用GridView而不是DataList,并使用GridView的RowCommand事件并修复了此问题。
原因是因为您试图从DataList
而不是LinkButton
中获得CommandName
。如果您执行以下操作,您的代码将正常工作:
protected void btnSample_Click(object sender, EventArgs e)
{
// Instantiate:
var command = ((LinkButton)sender).CommandName;
// Do additional logic.
}
我相信你的意图是在Click Event上做一些事情。如果不是这种情况,则需要对DataList
中的事件执行FindControl
,然后实例化LinkButton
以获得CommandName
。希望这能给你指明正确的方向。
我会在DataList
内做一个样本,但如果没有确切的实现和额外的信息,我将无法。它与上面的类似,只是在当前控件中分配Control
。