无法访问后面代码中的按钮

Posted

技术标签:

【中文标题】无法访问后面代码中的按钮【英文标题】:Cant access button in codebehind 【发布时间】:2020-01-11 08:25:15 【问题描述】:

我的 .aspx 文件中有这个按钮,并希望在我的 codeBehind .aspx.cs 文件中访问它。

它在 ListView 中,所以我假设这就是问题所在(我在访问 ListView 之外的任何元素时都没有问题) - 只是似乎无法弄清楚。

按钮代码(在 ID lvInstructorList 的 ListView 中):

<div class="col-3 checkInBtnDiv" runat="server">
     <asp:Button class="checkInBtn" ID="checkInBtn" runat="server" OnClick="CheckInBtn_Click" Text="Check-In"></asp:Button>   
</div>           

到目前为止,我在 codeBehind 中尝试过的内容: 1)

protected void CheckInBtn_Click(object sender, EventArgs e)

    (lvInstructors.FindControl("checkInBtn") as Button).Text = "New text";

2)

protected void CheckInBtn_Click(object sender, EventArgs e)

    var ctrl = (Control)sender;
    var lvi = (ListViewItem)ctrl.NamingContainer;
    var checkInBtn = (IButtonControl)lvi.FindControl("checkInBtn");
    checkInBtn.Text = "New Text";

但这些选项都没有奏效。有什么想法/提示吗?谢谢!

这是我的整个 ListView:

<asp:ListView
   ID="lvInstructors"
   runat="server"
   AutoGenerateColumns="False"
   ShowRegularGridWhenEmpty="False"
    EmptyDataText="No Sessions to Display."
    OnRowDataBound="lvDataBound"
   OnRowCommand="lvCommand"
   Visible="true">
      <LayoutTemplate>
          <div class="container" id="mainContent">
          <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
          </div>
      </LayoutTemplate>

       <ItemTemplate>
           <div class="row instructorItem">
              <div class="col-2 sessionStartTimeDiv">
                 <p class="sessionStartTime"><%#Eval("SessionStartTime")%></p>
              </div>

              <div class="col-2 instructorHeadshotDiv">
                  <asp:Image class="instructorHeadshot" runat="server" src='<%#Eval("InstructorHeadshot")%>' />
              </div>

              <div class="col-5 sessionInfoDiv">
                  <h3 class="instructorName"><%#Eval("InstructorName")%></h3>
                  <p class="sessionInfo"><%#Eval("SessionInfo")%></p>
              </div>

              <div class="col-3 checkInBtnDiv">
                 <asp:Button class="checkInBtn" ID="checkInBtn" runat="server" OnClick="CheckInBtn_Click" Text="Check-In"></asp:Button>
              </div>
            </div>
            <hr />
         </ItemTemplate>

         <EmptyDataTemplate>
            <br />
             <br />
              No Sessions to Display
          </EmptyDataTemplate>
 </asp:ListView>

【问题讨论】:

【参考方案1】:

您始终可以将发件人转换回按钮。

protected void checkInBtn_Click(object sender, EventArgs e)

    Button btn = sender as Button;
    btn.Text = "New text";

您的 2 sn-ps 不起作用的原因是 ListView 中的项目是基于索引的。你需要做这样的事情。

Button btn = ListView1.Items[i].FindControl("checkInBtn") as Button;

【讨论】:

试一试,不幸的是没有运气。我希望我没有忽略什么。我的代码对您来说是否正确? 我确信 100% 都有效。你能展示你完整的 ListView ItemTemplate 吗? 刚刚编辑了我的帖子以显示完整的 ListView - 顺便感谢您的帮助 用您的 ListView 测试。我的 sn-p 工作。 PS ListView 没有行但有项目 OnRowDataBound > OnItemDataBound 欣赏它@VDWWD!终于想通了。您的解决方案有效,但我需要将我的 Page_Load 方法中的代码包装在 'if(!IsPostBack)... ' 语句中。非常感谢

以上是关于无法访问后面代码中的按钮的主要内容,如果未能解决你的问题,请参考以下文章

向下滚动后无法访问导航栏中的菜单按钮

无法从 Xamarin 中的代码访问 x:列表的名称

按钮无法访问。如何修复此代码?

访问VBA无法刷新表单

无法复制表单中的全部刷新快速访问工具栏按钮

HttpClient 无法访问登录页面后面的页面