0

我知道有很多关于此的相关帖子或文章,但似乎它们对我的情况没有帮助。我什至与该站点上的工作示例进行了比较,http://www.ezineasp.net/post/ASP-Net-LinkBut​​ton-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 捕获到文本框中。两者都将执行相同的操作。我已经让图像按钮工作了。当我单击图像时,ID,例如 1 将出现在文本框中。但是当我想用链接按钮做同样的事情时,什么都不会发生。该事件不会以任何方式触发。

我看过一些关于中继器或 AJAX 做同样事情的帖子,但我只是想知道为什么这段代码不能工作。我将不胜感激任何指针。

4

4 回答 4

1

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

因此,当在列表视图中单击链接按钮后发生回发时,现有数据将消失。因此,不会到达 LinkBut​​ton 的 OnCommand 事件并且永远不会触发。

删除 ViewStateMode 属性后,一切正常。

于 2015-07-06T09:11:55.953 回答
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 应该不同于其他。

    <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>
于 2013-02-08T06:59:49.570 回答
0

好吧,如果有人想知道为什么会这样,这是我在花费大量时间撕下我的代码以查看它有什么问题后发现的。我怀疑有人会碰到这个问题,但要解决这个问题,分享就是关怀。

显然,我放在母版页中的搜索按钮是这背后的原因。我已将其 ID 分配为“提交”,这是阻止我的链接按钮工作的东西,我不知道为什么会这样。搜索功能只是一个允许用户在网页中查找关键字的搜索引擎。当搜索按钮的 ID 分配为“提交”时,链接按钮的 OnCommand 事件不会触发。

当我将其更改为“submit1”时,一切正常。我仍然是这个 asp.net 的新手,谁能告诉我为什么这甚至会影响链接按钮?无论如何,OnCommand 事件现在可以正常工作。

于 2013-02-13T07:18:04.207 回答
0

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

没有成功,我从其他建议之一中搜索了可能使用名称/ID“提交”的任何按钮。我的页面上没有。

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

于 2017-02-09T20:34:55.327 回答