【问题标题】:LinkButton Won't Trigger Command EventLinkBut​​ton 不会触发命令事件
【发布时间】:2013-02-08 06:23:22
【问题描述】:

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

我看到一些帖子谈论中继器或 AJAX 来做同样的事情,但我只是想知道为什么这段代码不能工作。我会很感激任何指针。

【问题讨论】:

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


    【解决方案1】:

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

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

    一旦 ViewStateMode 属性被删除,一切正常。

    【讨论】:

      【解决方案2】:

      我注意到您的 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>
      

      【讨论】:

      • 不,它不起作用。如果我这样说,图片按钮就不能正常工作了。
      • 我发现了另一个问题。让我尽快更新我的帖子
      • 一样,还是不行。实际上我昨天尝试了 ListViewCommandEventArgs,但没有工作,所以我更改为 CommandEventArgs,它返回了我想看到的结果。但是,LinkBut​​ton 不适用于我的原始方法以及您建议的解决方案。
      【解决方案3】:

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

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

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

      【讨论】:

      • 至于“为什么”,您应该为此打开一个单独的问题。
      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多