LinkBut​​ton不会触发命令事件

时间:2013-02-08 06:23:22

标签: c# asp.net listview event-handling

我知道有很多相关的帖子或文章,但似乎他们没有帮助我的情况。我甚至比较了这个网站的工作样本,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做同样的事情,但我只是想知道为什么这段代码不能正常工作。我很感激任何指针。

4 个答案:

答案 0 :(得分:1)

根据我自己的经验,我错误地在页面指令中设置了ViewStateMode="Disabled"

因此,当在列表视图中单击LinkBut​​ton时发生回发时,现有数据将消失。因此,不会触及LinkBut​​ton的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)

我遇到类似LinkBut​​tons的问题。我不记得我是怎么想出来的,但我必须非常沮丧并且很快就开始点击LinkBut​​ton几次,我注意到Command事件偶尔发生了一次。很快我想到了如果我在页面完全加载之前点击了LinkBut​​ton,命令会正确触发。如果页面完全加载,那么似乎有些东西在LinkBut​​ton上劫持了该命令。

如果没有成功,我会搜索其中一个建议,搜索任何可能使用名称/ ID的按钮&#34;提交&#34;。我的页面上没有一个。

成功之后,我尝试使用ASP.Net Buttons而不是LinkBut​​tons。这似乎解决了我的问题。我不完全确定导致这种情况的原因,但按钮似乎在我的情况下有效,所以我会坚持这一点。