我知道有很多相关的帖子或文章,但似乎他们没有帮助我的情况。我甚至比较了这个网站的工作样本,http://www.ezineasp.net/post/ASP-Net-LinkButton-Command-Event.aspx,我认为没有太大区别。我认为我的代码应该工作,但显然它不会。如果这看起来像重复,我很抱歉,但这是我在这里发帖的最后手段。
这是我的HTML:
<asp:ListView runat="server" ID="AppsList">
<LayoutTemplate>
<div>
<asp:PlaceHolder runat="server" ID="itemPlaceHolder" />
</div>
</LayoutTemplate>
<ItemTemplate>
<div class="applist">
<div class="app">
<asp:ImageButton ID="imgbtnApp" runat="server" ImageUrl='<%#Eval("Icon") %>' height="100" width="100" CommandName="Select" CommandArgument='<%# Eval("ID") %>' OnCommand="AppsList_ItemCommand" />
</div>
<div class="appname">
<asp:LinkButton ID="linkbtnAppName" runat="server" CommandName="Select" ForeColor="#333333" CommandArgument='<%# Eval("ID") %>' OnCommand="AppsList_ItemCommand" CssClass="linkbtnAppName"><%# Eval("AppName") %></asp:LinkButton>
</div>
</div>
</ItemTemplate>
<EmptyDataTemplate>
Sorry - Nothing found.
</EmptyDataTemplate>
</asp:ListView>
代码:
protected void AppsList_ItemCommand(object sender, CommandEventArgs e)
{
if (e.CommandName == "Select")
{
txtTest.Text = e.CommandArgument.ToString();
}
}
我在这里想要实现的是当我单击图像按钮或链接按钮时,将ListView中项目的ID捕获到文本框中。两者都将执行相同的事情。我已经让Image按钮工作了。单击图像时,ID(例如1)将出现在文本框中。但是当我想用链接按钮做同样的事情时,什么都不会发生。该事件不会以任何方式触发。
我看过一些帖子谈论转发器或AJAX做同样的事情,但我只是想知道为什么这段代码不能正常工作。我很感激任何指针。
答案 0 :(得分:1)
根据我自己的经验,我错误地在页面指令中设置了ViewStateMode="Disabled"
。
因此,当在列表视图中单击LinkButton时发生回发时,现有数据将消失。因此,不会触及LinkButton的OnCommand事件,也不会触发。
删除ViewStateMode属性后,一切运行良好。
答案 1 :(得分:0)
我注意到你的eventArgs应该是ListViewCommandEventArgs而不是CommandEventArgs,你还应该将itemCommand事件绑定到你的aspx页面,如下所示。
ASPX:
<asp:ListView runat="server" ID="AppsList" OnItemCommand="AppsList_OnItemCommand">
代码背后:
protected void AppsList_OnItemCommand(object sender, ListViewCommandEventArgs e)
{
if (String.Equals(e.CommandName, "Select"))
{
}
}
更新:
同时从图像按钮和链接按钮OnCommand =“AppsList_ItemCommand”中删除OnCommand属性,并且每个CommandName应该与其他CommandName不同。
<div class="applist">
<div class="app">
<asp:ImageButton ID="imgbtnApp" runat="server" ImageUrl='<%#Eval("Icon") %>' height="100" width="100" CommandName="Select" CommandArgument='<%# Eval("ID") %>' />
</div>
<div class="appname">
<asp:LinkButton ID="linkbtnAppName" runat="server" CommandName="Select" ForeColor="#333333" CommandArgument='<%# Eval("ID") %>' CssClass="linkbtnAppName"><%# Eval("AppName") %></asp:LinkButton>
</div>
</div>
</ItemTemplate>
答案 2 :(得分:0)
好吧,如果有人想知道为什么会发生这种情况,这就是我花了很多时间扯掉我的代码后才发现的问题,看看它有什么问题。我怀疑有人会碰到这个问题,但是为了解决这个问题,分享就是关心。
显然我放在母版页中的搜索按钮就是这背后的原因。我已将其ID分配为“提交”,这是阻止我的链接按钮工作的事情,我不知道为什么会发生这种情况。搜索功能仅仅是允许用户在网页中查找关键字的搜索引擎。当搜索按钮的ID被指定为“提交”时,链接按钮的OnCommmand事件不会触发。
当我将其更改为“submit1”时,一切正常。我仍然是这个asp.net的新手,有谁能告诉我为什么这甚至影响了linkbutton?无论如何,OnCommand事件现在正常工作。
答案 3 :(得分:0)
我遇到类似LinkButtons的问题。我不记得我是怎么想出来的,但我必须非常沮丧并且很快就开始点击LinkButton几次,我注意到Command事件偶尔发生了一次。很快我想到了如果我在页面完全加载之前点击了LinkButton,命令会正确触发。如果页面完全加载,那么似乎有些东西在LinkButton上劫持了该命令。
如果没有成功,我会搜索其中一个建议,搜索任何可能使用名称/ ID的按钮&#34;提交&#34;。我的页面上没有一个。
成功之后,我尝试使用ASP.Net Buttons而不是LinkButtons。这似乎解决了我的问题。我不完全确定导致这种情况的原因,但按钮似乎在我的情况下有效,所以我会坚持这一点。