C# ASP.NET链接按钮未调用';OnCommand';事件
我在GridView的列中嵌套了一个ListView,如下所示:C# ASP.NET链接按钮未调用';OnCommand';事件,c#,asp.net,.net,listview,C#,Asp.net,.net,Listview,我在GridView的列中嵌套了一个ListView,如下所示: <asp:panel id="myPanel" Runat="server" EnableViewState="False"> <asp:GridView id="myDescription" AutoGenerateColumns="False" Width="100%" runat="server" OnRowCommand="my_RowCommand" OnRowDataBou
<asp:panel id="myPanel" Runat="server" EnableViewState="False">
<asp:GridView id="myDescription" AutoGenerateColumns="False" Width="100%" runat="server"
OnRowCommand="my_RowCommand" OnRowDataBound="GetDataForListView" EnableViewState="False">
<Columns>
<asp:BoundField DataField="id" HeaderText="ID">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="data1" HeaderText="Thing 1">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="data2" HeaderText="Thing2">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="data3" HeaderText="Thing3">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundField>
<asp:TemplateField SortExpression="id">
<ItemTemplate>
<asp:HyperLink id="hlView" runat="server" NavigateUrl="...">View</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Column to contain my list of things">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<% /* This is my list view: */ %>
<asp:ListView ID="myListView" runat="server" OnItemCommand="DoSomething" EnableViewState="False">
<ItemTemplate>
<asp:LinkButton ID="lbAttachment" Runat="Server" Text='<%# Eval("FILE_NAME") %>'
CommandName='<%# Eval("ROW_NUM") %>' CausesValidation="False" >
</asp:LinkButton><br/>
</ItemTemplate>
</asp:ListView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:panel>
但这只会阻止回发的发生,OnCommand事件仍然不会触发
有什么想法吗
代码隐藏中的事件签名为:
protected void DoSomething(object sender, CommandEventArgs e) { ... }
我还尝试在具有此事件签名的ListView控件上使用OnItemCommand事件,但类似地,不会调用该事件:
protected void DoSomething(object sender, ListViewCommandEventArgs e)
父GridView上的OnRowdataBound事件已成功调用,只有嵌套的ListView未能调用其事件
我所展示的代码是针对页面上的第二个GridView的,还有另一个,就是这个代码绑定在页面加载事件上。页面加载事件有如下一系列事件,其中绑定了第一个GridView(我们称之为GridView1):
页面加载
GridView的数据是从数据库检索的
- 数据分配给“DataView”对象,并分配给GridView1数据源属性
- 调用GridView1.DataBind()
- 从GridView1中删除某些列的杂项条件逻辑
- 每行都添加一个OnClick属性李>
- 将包含数据的数据集分配给第二个GridView的DataSource属性
- 调用DataBind()方法
<asp:LinkButton ID="linkButton" Runat="Server" OnCommand="DoSomething"
CommandName="DoSomething"
CommandArgument='<%# Eval("ROW_NUM") %>' Text='<%# Eval("FILE_NAME") %>'>
</asp:LinkButton>
您的按钮仍需要设置命令名,如:
<asp:LinkButton .. CommandName="DoSomething" />
Ciaran,我复制了整个场景,发现了以下问题 问题:当任何与GridView2或ListView或LinkButton相关的事件被触发时,它会首先点击页面加载功能。在页面加载函数中,您没有数据绑定GridView2和ListView,因此显然它们几乎消失,因此不会触发事件 可能的解决方案:
如果有任何疑问,请告诉我。您如何确定事件没有触发?调试时是否在方法中放入断点?是的,它不会转到断点。您是否可以提供完整的GridView aspx代码,因为我尝试复制该问题,但我能够在代码中找到OnCommand事件。!?我再次使用上面的aspx代码复制了上述内容,包括Page_Load方法中的gridview绑定和。我能够在没有任何问题的情况下找到隐藏的代码。因此,问题可能是你的代码隐藏。你也可以发布代码隐藏吗(很抱歉,我没有直接问你)。哦,还有,我一开始就忘了提到这个GridView实际上是页面上的第二个GridView。我已经在上面的问题描述的编辑中解释了这一点。对不起,这实际上是一个打字错误。我对LinkButton实际拥有的是一个OnCommand事件。ListView上的OnItemCommand或LinkButton上的“OnCommand”事件均未被调用。您的按钮必须具有CommandName=“####”才能起作用,如上所示。我也尝试过。单击LinkButton时,仍会发生回发,并且仍不会调用该命令。OnCommand或OnItemCommand事件都不起作用。无论我在这里放置什么,呈现的HTML都不会改变-它仍然只是调用回发。好吧,我没有意识到涉及到GridView。。。尝试为GridView添加RowCommand事件处理程序。GridView可能会吞并命令事件,因为数据绑定模板控件是如何工作的……我已经使用OnRowCommand来绑定GridView的值。这会干扰GridView中包含的ListView的事件绑定吗?
<asp:ListView .. OnItemCommand=".." />
void DoSomething(Object Sender, ListViewCommandEventArgs e) {
// Do something
}
<asp:LinkButton .. CommandName="DoSomething" />